Как правильно открывать фрагменты в MVVM в Android

Использую в своем проекте MVVM, возник вопрос, как правильно открывать фрагменты в MVVM? Дело в том, что фрагмент и активити у меня используют общую ViewModel для работы. Соответсвенно когда я снова после закрытия вызываю фрагмент, у него сохраняется предыдущее состяние переменных и LiveData, MutableLiveData переменых. А мне нужно новое, пустое состояние для заполнения пользователем данных.

С Navigation Architecture Component еще не знаком, хотелось бы понять как решать такие ситуации без него.


Ответы (1 шт):

Автор решения: Sergei Buvaka

Если вы хотите каждый раз получать новые данные, тут есть несколько решений:

  • Используйте разные ViewModels. Уничтожился фрагмент, умерла ViewModel.

  • Очищайте ViewModel после того как завершаете работу с фрагментами.

  • Можете в вашей ViewModel иметь какие-то стейты и при запуске фрагмента выбирать нужный вам стейт и в зависимости от него грузить нужные данные.

  • Стоит так же подумать о том на какие данные и когда вы подписываетесь. Немного странно что у вас создается новый фрагмент и подписывается на данные которые вам не нужны.

Я не до конца уверен, что вам вообще необходимо иметь одну ViewModel для сущностей в которых должны быть разные данные. Поэтому я больше склоняюсь к первому варианту. Но тут надо более полно видеть задачу.

По поводу Navigation Architecture Component. Этот фреймворк мало имеет отношения к вашей задаче. Ну т.е. это просто обертка для более удобной навигации между фрагментами, но как их заполнять он не решает.

→ Ссылка