Was ist ViewModelStore und viewModelStoreOwner?

12

Ich bin aufgrund dieser neuen ViewModelProvider-API sehr verwirrt (ViewModelProviders ist veraltet)

Wie bei den neuen Änderungen gibt es auch hier neue Konstruktoren (Quellcode).

# 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-Abhängigkeit:

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

Also diese Konstrukteure benötigen ViewModelStoreund viewModelStoreOwner.

Doc:

@param store {@code ViewModelStore}, in dem ViewModels gespeichert werden.

@param Eigentümer ein {@code ViewModelStoreOwner}, dessen {@link ViewModelStore} verwendet wird, um {@code ViewModels} beizubehalten


Kann jemand sie definieren und wie man sie benutzt und was sie für uns Entwickler wirklich bedeuten?


ist ViewModelStoreOwner == Aktivität / Fragment?

Anmol
quelle

Antworten:

6

Kann jemand sie definieren und wie man sie benutzt und was sie für uns Entwickler wirklich bedeuten?

A ViewModelStorekann als Container betrachtet werden, in dem die ViewModels in a gespeichert sind HashMap. Dabei keyist der Wert der Zeichenfolge und der Wert das zu speichernde ViewModel ( ViewModelProviderverwendet eine Verkettung des string_keykanonischen Namens der + ViewModel-Klasse).

A ViewModelStoreOwnerist lediglich eine Schnittstelle. Jede Klasse, die getViewModelStore()die von dieser Schnittstelle definierte implementiert, wird Eigentümer von ViewModelStore. Diese Klasse verwaltet dann das ViewModelStoreund sollte dafür verantwortlich sein, es bei Bedarf angemessen wiederherzustellen.

Wir können unsere eigene Version des Eigentümers und des Staates basierend auf der Anforderung implementieren.

ist ViewModelStoreOwner == Aktivität / Fragment?

Ja. Basierend auf dem Android-Quellcode werden sowohl Fragment(von androidx.fragment.app) als auch ComponentActivity(von androidx.activity) implementiert ViewModelStoreOwner. Diese Klassen pflegen a viewModelStoreund der Wert wird entsprechend wiederhergestellt.

Sagar
quelle