Выбор ответа Junior ViewModel и сохранение состояния обновлено
Общая ViewModel для фрагментов
Вопрос
Как двум фрагментам одной Activity получить один и тот же экземпляр ViewModel?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: by activityViewModels() в каждом фрагменте. activityViewModels() берёт ViewModel из ViewModelStore Activity, поэтому все фрагменты получают один объект. viewModels() использует store самого фрагмента, у каждого фрагмента будет своя.
Варианты ответа
by viewModels()в каждом фрагменте- Создать
SharedViewModel()через конструктор и передать в аргументах - Сделать ViewModel
object by activityViewModels()в каждом фрагментеправильный ответ
Разбор
activityViewModels() берёт ViewModel из ViewModelStore Activity, поэтому все фрагменты получают один объект. viewModels() использует store самого фрагмента, у каждого фрагмента будет своя. Конструктор создаёт объект мимо store, и он не переживёт поворот. ViewModel-синглтон ломает жизненный цикл и не очищается. В Navigation для графа есть navGraphViewModels.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.