Що таке ViewModelStore та viewModelStoreOwner?


12

Я дуже розгублений через цю нову версію програми ViewModelProvider (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.

Документ:

@param магазин {@code ViewModelStore}, де зберігатимуться ViewModels.

Власник @param {@code ViewModelStoreOwner}, {@link ViewModelStore} буде використовуватися для збереження {@code ViewModels}


Хтось може їх визначити і як їх використовувати, і що вони насправді означають для нас, розробників?


ViewModelStoreOwner == активність / фрагмент?

Відповіді:


6

Хтось може їх визначити і як їх використовувати, і що вони насправді означають для нас, розробників?

А ViewModelStoreможе розглядатися як контейнер, який зберігає ViewModels у a HashMap. Там, де keyзначення рядка і значення - це збереження ViewModel ( ViewModelProviderвикористовує конкатенацію string_keyканонічного імені класу + ViewModel).

A ViewModelStoreOwner- це просто інтерфейс. Будь-який клас, який реалізує getViewModelStore()визначений цим інтерфейсом, стає власником ViewModelStore. Потім цей клас підтримує ViewModelStoreі повинен відповідати за належне відновлення його за потреби.

На основі вимоги ми можемо реалізувати власну версію власника та держави.

ViewModelStoreOwner == активність / фрагмент?

Так. На основі вихідного коду Android, обидва Fragment(від androidx.fragment.app) та ComponentActivity(від androidx.activity) програми ViewModelStoreOwner. Ці класи підтримують a, viewModelStoreа значення відновлюється належним чином.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.