Выбор ответа Junior ViewModel и сохранение состояния обновлено

Общая ViewModel для фрагментов

Вопрос

Как двум фрагментам одной Activity получить один и тот же экземпляр ViewModel?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: by activityViewModels() в каждом фрагменте. activityViewModels() берёт ViewModel из ViewModelStore Activity, поэтому все фрагменты получают один объект. viewModels() использует store самого фрагмента, у каждого фрагмента будет своя.

Варианты ответа

  1. by viewModels() в каждом фрагменте
  2. Создать SharedViewModel() через конструктор и передать в аргументах
  3. Сделать ViewModel object
  4. by activityViewModels() в каждом фрагментеправильный ответ

Разбор

activityViewModels() берёт ViewModel из ViewModelStore Activity, поэтому все фрагменты получают один объект. viewModels() использует store самого фрагмента, у каждого фрагмента будет своя. Конструктор создаёт объект мимо store, и он не переживёт поворот. ViewModel-синглтон ломает жизненный цикл и не очищается. В Navigation для графа есть navGraphViewModels.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме