Che cos'è ViewModelStore e viewModelStoreOwner?


12

Sono molto confuso a causa di questo nuovo API ViewModelProvider (ViewModelProviders è deprecato)

Come per le nuove modifiche ci sono anche nuovi costruttori (codice sorgente).

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

Dipendenza dal grado:

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

Quindi questi costruttori richiedono ViewModelStoree viewModelStoreOwner.

Doc:

@param store {@code ViewModelStore} dove verranno archiviati ViewModels.

@param proprietario di un {@code ViewModelStoreOwner} il cui {@link ViewModelStore} verrà utilizzato per conservare {@code ViewModels}


Qualcuno può definirli e come usarli e cosa significano veramente per noi sviluppatori?


è ViewModelStoreOwner == attività / frammento?

Risposte:


6

Qualcuno può definirli e come usarli e cosa significano veramente per noi sviluppatori?

A ViewModelStorepuò essere considerato come un contenitore che memorizza i ViewModels in a HashMap. Dove keyè il valore stringa e valore è ViewModel che viene salvato ( ViewModelProviderutilizza una concatenazione del string_keynome canonico della classe + ViewModel).

A ViewModelStoreOwnerè semplicemente un'interfaccia. Qualsiasi classe che implementa il getViewModelStore()definito da questa interfaccia diventa il proprietario di ViewModelStore. Questa classe mantiene quindi ViewModelStoree dovrebbe essere responsabile di ripristinarla in modo appropriato quando necessario.

Possiamo implementare la nostra versione del proprietario e lo stato in base al requisito.

è ViewModelStoreOwner == attività / frammento?

Sì. Basato sul codice sorgente Android, implementa sia Fragment(da androidx.fragment.app) che ComponentActivity(da androidx.activity) ViewModelStoreOwner. Queste classi mantengono un viewModelStorevalore e viene ripristinato in modo appropriato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.