代码之家  ›  专栏  ›  技术社区  ›  Cheok Yan Cheng

在Fragement中构建ViewModelProvider时,我们应该传递片段还是活动?

  •  0
  • Cheok Yan Cheng  · 技术社区  · 6 年前

    我想知道,对于下面的两个代码片段,推荐的方法是什么?

    在构造ViewModelProvider时使用片段

    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时使用活动

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

    这两个代码都是可行的。但是,“更正确”的方法是什么?

    1 回复  |  直到 6 年前
        1
  •  1
  •   buzzingsilently    6 年前

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

    使用ViewModel对象可以解决这个常见的问题。 想象一个常见的主细节片段,我们有一个 用户从一个列表和另一个列表中选择一个项目的片段 显示所选项目内容的片段。

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

    它会让你的 ViewModel 在同一活动的不同片段之间可用。这将有助于在数据片段之间传输数据 相同的 活动

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