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



我有一个活动和 4 个片段。起初,我想为视图模型的每个片段做。但是情况是这样的,我还需要 ViewModel for Activity。我想知道仅针对活动制作视图模型并使用getActivity从片段中调用必要的方法是否是错误的?例如,在片段处调用getActivity((.myViewModel.callMethod((这种方法会不会错吗?

是的,您可以在片段中使用活动的视图模型,但不能像那样getActivity().myViewModel.callMethod()。应该是这样的

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

片段之间共享数据是一种很好的做法。

谷歌官方文件说

这样,当每个片段获得 ViewModelProvider 时,它们 接收相同的共享视图模型实例,该实例的范围为此 活动。

此方法具有以下优点:

  • 活动不需要做任何事情,或者对此一无所知 通信。
  • 碎片不需要相互了解,除了 "共享视图模型"合约。如果其中一个片段消失,则 另一个继续照常工作。
  • 每个片段都有自己的生命周期, 并且不受另一个生命周期的影响。如果一个片段 替换另一个,UI 继续工作没有任何问题。

相关内容