Как создать ViewModel для каждой страницы в ViewPager?

У меня есть ViewPager, где я показываю несколько экземпляров PetFragment. Чтобы создать новый экземпляр PetFragment, я вызываю PetFragment.newInstance(petId).

Я хочу отдельный экземпляр ViewModel для каждого petId. Но ViewModelProvider.Factory#create() принимает только Class<T> в качестве параметра. Как мне этого добиться?


person ZakTaccardi    schedule 08.02.2018    source источник
comment
твоя проблема решена? . У меня тоже такая же проблема. stackoverflow.com/questions/54862222/   -  person karthik kolanji    schedule 25.02.2019


Ответы (1)


Взгляните на ViewModelProvider.get(@NonNull String key, @NonNull Class<T> modelClass), у вас должна быть возможность иметь несколько ViewModels для определенного класса, хранящегося по ключу.

ViewModelProvider.get(@NonNull Class<T> modelClass) просто вызывает этот первый метод с ключом по умолчанию.

Вызов get взаимодействует с ViewModelStore, который является оболочкой вокруг HashMap<String, ViewModel>, что должно позволить вам хранить различные ViewModel для одного и того же типа фрагмента, если каждый из них имеет уникальный ключ для определения того, что он должен отображать.

person Bryan Dormaier    schedule 09.02.2018
comment
отлично. это помогло мне. - person filthy_wizard; 18.01.2019
comment
попробовал то же самое, у меня не сработало. by-last-tab" title="viewpager с моделью представления и оперативными данными, все данные 6 вкладок заменяются последней вкладкой"> stackoverflow.com/questions/54862222/ - person karthik kolanji; 25.02.2019