由于这个新的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"
因此,这些构造函数需要
ViewModelStore
和viewModelStoreOwner
。文件:
谁能定义它们以及如何使用它们以及它们对我们开发人员的真正意义是什么?
是ViewModelStoreOwner == Activity /片段吗?
最佳答案
可以将ViewModelStore
视为将ViewModels存储在HashMap
中的容器。其中key
是字符串值,值是要保存的ViewModel(ViewModelProvider
使用string_key
+ ViewModel类规范名称的串联)。ViewModelStoreOwner
仅仅是一个接口(interface)。任何实现此接口(interface)定义的getViewModelStore()
的类都将成为ViewModelStore
的所有者。然后,此类维护ViewModelStore
并应负责在需要时适本地还原它。
我们可以根据要求实现自己的所有者和状态版本。
是的。基于Android源代码,Fragment
(来自androidx.fragment.app
)和ComponentActivity
(来自androidx.activity
)都实现ViewModelStoreOwner
。这些类维护一个viewModelStore
并适本地恢复了值。