我正在创建一个测试活动来更新MyViewModel中的一些文本。
我想在Fragment中观察这些变化,但是当我使用时
MyViewModel myViewModel = new ViewModelProvider(this).get(MyViewModel.class);
[它为我提供了与活动中所用实例不同的MyViewModel实例,这导致我的onChanged()
回调不被调用。
仅当我将相同的片段代码修改为]时>
HomeViewModel homeViewModel = new ViewModelProvider(getActivity()).get(HomeViewModel.class);
该片段是否获得与活动相同的MyViewModel实例-因此成功调用了
onChanged()
。
但是,我不确定使用getActivity()
作为ViewModelStoreOwner是否是正确的处理方式,因为我在任何地方的示例中都没有看到这一点。我想知道在这种情况下是否应该使用更好的ViewModelStoreOwner?
我正在创建一个测试活动,该活动将更新MyViewModel中的某些文本。我想在一个片段中观察这些变化,但是当我使用MyViewModel myViewModel = new ViewModelProvider(this).get(...
拥有尽可能少的Activity
现在已经成为“最佳实践”,因此Activity
和Fragment
需要访问同一ViewModel
实例的场景可能不会被许多指南所覆盖。
[Activity和Fragment都实现了自己的ViewModelStoreOwner,用于存储由ViewModelProvider
创建的视图模型对象。