gpt4 book ai didi

android - 什么是 ViewModelStore 和 viewModelStoreOwner?

转载 作者:行者123 更新时间:2023-12-02 13:31:43 28 4
gpt4 key购买 nike

由于这个新的 ViewModelProvider api(ViewModelProviders 已弃用),我感到非常困惑

与新的更改一样,也有新的构造函数(源代码)。

#1

public ViewModelProvider(@NonNull ViewModelStoreOwner owner) {
this(owner.getViewModelStore(), owner instanceof HasDefaultViewModelProviderFactory
? ((HasDefaultViewModelProviderFactory) owner).getDefaultViewModelProviderFactory()
: NewInstanceFactory.getInstance());
}

#2

public ViewModelProvider(@NonNull ViewModelStoreOwner owner, @NonNull Factory factory) {
this(owner.getViewModelStore(), factory);
}

#3

 public ViewModelProvider(@NonNull ViewModelStore store, @NonNull Factory factory) {
mFactory = factory;
mViewModelStore = store;
}

Gradle 依赖:

implementation "androidx.lifecycle:lifecycle-extensions:2.2.0-rc02"

所以这些构造函数需要 ViewModelStoreviewModelStoreOwner

文档:

@param store {@code ViewModelStore} where ViewModels will be stored.

@param owner a {@code ViewModelStoreOwner} whose {@link ViewModelStore} will be used to retain {@code ViewModels}

<小时/>

任何人都可以定义它们以及如何使用它们以及它们对我们开发人员的真正意义吗?

<小时/>

ViewModelStoreOwner==activity/fragment 吗?

最佳答案

Can anyone define them and how to use them and what they really mean to us developer's?

ViewModelStore 可以被视为将 ViewModel 存储在 HashMap 中的容器。其中 key 是字符串值,value 是要保存的 ViewModel(ViewModelProvider 使用 string_key + ViewModel 类规范名称的串联)。

ViewModelStoreOwner 只是一个接口(interface)。任何实现此接口(interface)定义的 getViewModelStore() 的类都会成为 ViewModelStore 的所有者。然后,此类维护 ViewModelStore 并负责在需要时适本地恢复它。

我们可以根据需求实现我们自己的所有者和状态版本。

is ViewModelStoreOwner==activity/fragment?

是的。基于 Android 源代码,Fragment(来自 androidx.fragment.app)和 ComponentActivity(来自 androidx.activity code>) 实现 ViewModelStoreOwner。这些类维护一个 viewModelStore 并适本地恢复值。

关于android - 什么是 ViewModelStore 和 viewModelStoreOwner?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58892411/

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