我有一个活动和4个片段。首先,我想对ViewModel的每个片段进行操作。但是这种情况使得我还需要ViewModel用于Activity。我想知道是否只为Activity创建ViewModel并使用getActivity从片段中调用必要的方法是否会出错?例如,在片段处调用getActivity()。myViewModel.callMethod()?这种方法会不会出错?
答案 0 :(得分:0)
是的,您可以在一个片段上使用Activity的ViewModel,但不能像getActivity().myViewModel.callMethod()
那样使用。应该是这样
YourViewModel viewModel = ViewModelProviders.of(getActivity()).get(YourViewModel.class);
在片段之间共享数据是一种好习惯。
这样,当每个片段都获得ViewModelProvider时,它们 接收相同的SharedViewModel实例,其范围仅限于此 活动。
此方法具有以下优点:
- 该活动无需执行任何操作或对此一无所知 通讯。
- 片段不需要彼此了解 SharedViewModel合同。如果其中一个片段消失了, 另一个人照常工作。
- 每个片段都有自己的生命周期, 并且不受另一个生命周期的影响。如果一个片段 替换另一个,UI可以继续正常工作。