gpt4 book ai didi

android - fragment 中的 ViewModelProvider 使用什么 ViewModelStoreOwner?

转载 作者:行者123 更新时间:2023-12-03 13:26:43 29 4
gpt4 key购买 nike

我创建了一个测试 Activity 来更新 MyViewModel 中的一些文本。

我想在 中观察这些变化 fragment ,但是当我使用

MyViewModel myViewModel = new ViewModelProvider(this).get(MyViewModel.class);

它给了我一个与 Activity 中使用的不同的 MyViewModel 实例,这导致我的 onChanged() fragment 中的回调未被调用。

只有当我将相同的 fragment 代码修改为
HomeViewModel homeViewModel = new ViewModelProvider(getActivity()).get(HomeViewModel.class);

fragment 是否获得与 Activity 相同的 MyViewModel 实例 - 所以 onChanged()被成功调用。

但是,我不确定是否使用 getActivity()因为 ViewModelStoreOwner 是正确的做事方式,因为我在任何地方的任何示例中都没有看到这一点。我想知道在这种情况下是否应该使用更好的 ViewModelStoreOwner ?

最佳答案

I'm wondering if there might be a better ViewModelStoreOwner I should be using in this instance?



您应该使用 activity用于在同一 Activity 中的 fragment 之间共享同一实例的实例。

Activity 和 Fragment实现自己的 ViewModelStoreOwner接口(interface)并实现 getViewModelStore()方法。 getViewModelStore()提供 ViewModelStore用于存储 viewmodel 的实例对象,由 ViewModelProvider 创建.

注: ComponentActivity实现 ViewModelStoreOwner接口(interface)和 FragmentActivity (AppCompatActivity 的父级)继承了实现。

所以 Activity 和 Fragment 都有针对 ViewModelStoreOwner 的具体实现。接口(interface)方法并按照 lifecycle 存储 View 模型实例对象(包括配置更改)。

由于 fragment 属于 Activity ,所以使用 getActivity()将导致使用 ViewModelStoreOwner Activity 的对象。要在 fragment 之间共享对象,只需使用 Activity 实例创建 ViewModelProvider这将使用相同的 ViewModelStoreOwner因此在所有 fragment 中将返回 viewmodel 的持久对象(如果之前创建)。

关于android - fragment 中的 ViewModelProvider 使用什么 ViewModelStoreOwner?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61373456/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com