片段中用于ViewModelProvider的ViewModelStoreOwner是什么?

问题描述 投票:2回答:2

我正在创建一个测试活动来更新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(...

android android-fragments android-livedata android-viewmodel
2个回答
0
投票

拥有尽可能少的Activity现在已经成为“最佳实践”,因此ActivityFragment需要访问同一ViewModel实例的场景可能不会被许多指南所覆盖。


0
投票

[Activity和Fragment都实现了自己的ViewModelStoreOwner,用于存储由ViewModelProvider创建的视图模型对象。

© www.soinside.com 2019 - 2024. All rights reserved.