什么是ViewModelStore和viewModelStoreOwner?


12

由于这个新的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;
    }

摇篮依赖度:

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

所以这些构造函数的要求 ViewModelStoreviewModelStoreOwner

文件:

@param store {@code ViewModelStore}将在其中存储ViewModels。

@param拥有者{@code ViewModelStoreOwner},其{@link ViewModelStore}将用于保留{@code ViewModels}


谁能定义它们以及如何使用它们以及它们对我们开发人员的真正意义是什么?


是ViewModelStoreOwner ==活动/片段吗?

Answers:


6

谁能定义它们以及如何使用它们以及它们对我们开发人员的真正意义是什么?

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

A ViewModelStoreOwner仅仅是一个接口。实现getViewModelStore()此接口定义的任何类都将成为的所有者ViewModelStore。然后,此类维护了ViewModelStore并且应负责在需要时适当地还原它。

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

是ViewModelStoreOwner ==活动/片段吗?

是。基于(Android)源代码,Fragment(from androidx.fragment.app)和ComponentActivity(from androidx.activity)都实现了ViewModelStoreOwner。这些类保持a viewModelStore值正确恢复。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.