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

时间:2017-07-31 07:18:07

标签: android android-architecture-components android-architecture-lifecycle

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

3 个答案:

答案 0 :(得分:0)

您听说过Interface Listener。无论有多少并发症,这都将为您提供各方面的帮助。如果你仍然困惑,请告诉我

答案 1 :(得分:0)

@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);
}

正如您所看到的,片段直接与viewmodel通信,viewmodel是对数据的请求或设置一些新数据。此操作可识别生命周期,但我知道它必须通过活动与数据层进行通信?这是来自官方android页面的代码片段

答案 2 :(得分:0)

我不确定我是否理解你。您想要使用Fragment的生命周期意识在Fragment的Activity中加载数据吗?

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

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

我不确定这是否有效或者这是一个好主意。谷歌指南只反过来显示它,从片段中的活动访问ViewModel,在片段或活动和片段之间共享数据。