首页 > 解决方案 > 在 Fragment 中构造 ViewModelProvider 时,应该传入 Fragment 还是 Activity?

问题描述

我想知道,对于以下 2 个代码片段,推荐的方式是什么?

构造 ViewModelProvider 时使用 Fragment

public class MyFragment extends Fragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        final ViewModelProvider viewModelProvider = new ViewModelProvider(this);
        tabInfoViewModel = viewModelProvider.get(TabInfoViewModel.class);
    }

构造ViewModelProvider时使用Activity

public class MyFragment extends Fragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        final ViewModelProvider viewModelProvider = new ViewModelProvider(getActivity());
        tabInfoViewModel = viewModelProvider.get(TabInfoViewModel.class);
    }

两种代码都是可行的。但是,哪个是“更正确”的方式?

标签: android

解决方案


一个活动中的两个或多个片段需要相互通信是很常见的。这绝不是微不足道的,因为两个片段都需要定义一些接口描述,并且所有者活动必须将两者绑定在一起。此外,两个片段都必须处理另一个片段尚未创建或不可见的情况。

这个常见的痛点可以通过使用 ViewModel 对象来解决。想象一个主从片段的常见情况,我们有一个片段,其中用户从列表中选择一个项目,另一个片段显示所选项目的内容。

这些片段可以使用它们的活动范围共享一个 ViewModel 来处理这种通信。

它将让您ViewModel在同一活动的不同片段之间可用。在同一活动的片段之间传输数据将很有帮助。

tabInfoViewModel = ViewModelProviders.of(getActivity()).get(TabInfoViewModel.class);

推荐阅读