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;
    }

Gradle依存関係:

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

したがって、これらのコンストラクタはrequire ViewModelStoreおよびviewModelStoreOwnerです。

文書:

@param store {@code ViewModelStore} ViewModelが格納されます。

@param owner {@code ViewModelStore}が{@code ViewModels}を保持するために使用される{@code ViewModelStoreOwner}


誰かがそれらを定義し、それらをどのように使用するのか、そしてそれらが私たちの開発者にとって本当に何を意味するのか


ViewModelStoreOwner == activity / fragmentは何ですか?

回答:


6

誰かがそれらを定義し、それらをどのように使用するのか、そしてそれらが私たちの開発者にとって本当に何を意味するのか

Aは、ViewModelStoreでのviewmodelsを格納するコンテナと考えることができますHashMap。ここで、keyは文字列値であり、valueは保存されるViewModelです(+ ViewModelクラスの正規名のViewModelProvider連結を使用しますstring_key)。

A ViewModelStoreOwnerは単なるインターフェースです。getViewModelStore()このインターフェイスによって定義されたクラスを実装するクラスは、の所有者になりViewModelStoreます。このクラスはを維持しViewModelStore、必要に応じて適切に復元する必要があります。

要件に基づいて、所有者の独自バージョンと状態を実装できます。

ViewModelStoreOwner == activity / fragmentは何ですか?

はい。Androidソースコードに基づいて、Fragment(からandroidx.fragment.app)とComponentActivity(からandroidx.activity)の両方が実装されViewModelStoreOwnerます。これらのクラスはa viewModelStoreを維持し、値は適切に復元されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.