是否可以通过Activity从片段中调用ViewModel方法,或者这是一种不好的做法?

时间:2019-07-12 06:24:31

标签: android mvvm

我有一个活动和4个片段。首先,我想对ViewModel的每个片段进行操作。但是这种情况使得我还需要ViewModel用于Activity。我想知道是否只为Activity创建ViewModel并使用getActivity从片段中调用必要的方法是否会出错?例如,在片段处调用getActivity()。myViewModel.callMethod()?这种方法会不会出错?

1 个答案:

答案 0 :(得分:0)

是的,您可以在一个片段上使用Activity的ViewModel,但不能像getActivity().myViewModel.callMethod()那样使用。应该是这样

YourViewModel viewModel = ViewModelProviders.of(getActivity()).get(YourViewModel.class);

在片段之间共享数据是一种好习惯。

Official doc of Google

  

这样,当每个片段都获得ViewModelProvider时,它们   接收相同的SharedViewModel实例,其范围仅限于此   活动。

     

此方法具有以下优点:

     
      
  • 该活动无需执行任何操作或对此一无所知   通讯。
  •   
  • 片段不需要彼此了解   SharedViewModel合同。如果其中一个片段消失了,   另一个人照常工作。
  •   
  • 每个片段都有自己的生命周期,   并且不受另一个生命周期的影响。如果一个片段   替换另一个,UI可以继续正常工作。
  •