使用 Activity 和 Fragments 实现新的 Android 架构组件

Implementing the new Android Architecture Components with Activity and Fragments

目前我正在尝试使用 android 提供的架构组件来实现一个应用程序。就仅使用 UI 包中的活动而言,这没有问题,但如果我在片段容器中实现由一个 activity 持有的多个片段,我就会遇到麻烦。使用片段的数据请求通信永远不应从片段本身调用,而应从其 activity 调用。在这种情况下,只有 activity 会注册所需的视图模型,但每个片段的生命周期处理不当... 如何在一个 activity 中使用多个片段来面对这个问题从服务器请求数据并注意片段的生命周期,即使 activity 正在调用视图模型?

你听说过Interface Listener吗?无论有多少并发症,这都会在所有方面为您提供帮助。如果您仍然感到困惑,请告诉我

@Rahul Khurana

public class UserProfileFragment extends LifecycleFragment {
private static final String UID_KEY = "uid";
private UserProfileViewModel viewModel;

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    String userId = getArguments().getString(UID_KEY);
    viewModel = ViewModelProviders.of(this).get(UserProfileViewModel.class);
    viewModel.init(userId);
}

@Override
public View onCreateView(LayoutInflater inflater,
            @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    return inflater.inflate(R.layout.user_profile, container, false);
}

如您所见,片段直接与视图模型通信,这是对数据的请求或设置一些新数据。此操作是生命周期感知的,但我知道必须通过 activity?这是来自官方 android 页面

的代码片段

我不确定我是否理解正确。您想通过片段的生命周期感知将数据加载到片段的 Activity 中吗?

也许您可以尝试从 Activity 访问 Fragment 的 ViewModel 以获得 FragmentLifecycle 感知 ViewModel。而且您可以通过此 ViewModel 查询数据。

viewModel = ViewModelProviders.of(YourFragment).get(FragmentViewModel.class);

我不确定这是否可行,或者这是否是个好主意。 google 指南仅以相反的方式展示它,从 Fragment 中的 Activity 访问 ViewModel,以在 Fragment 或 Activity 和 Fragment 之间共享数据。