Общее состояние MVVM с анимированными представлениями

#android #mvvm #fragment #android-architecture-components #android-livedata

#Android #mvvm #фрагмент #android-архитектура-компоненты #android-livedata

Вопрос:

Предполагая, что у меня есть 2 фрагмента A и B. Каждый из них содержит представление соответственно ViewA и ViewB. По умолчанию оба представления скрыты.

Существует модель общего представления под названием sharedVM (связанная с активностью)

Событие A от пользователя покажет ViewA с анимацией и скроет ViewB с анимацией (если ViewB виден) Событие B от пользователя покажет ViewB с анимацией и скроет ViewA с анимацией (если ViewA виден)

Я думал о:

Решение 1: Используйте состояние LiveData внутри sharedVM, чтобы узнать, скрыты ли представления или видны. Но затем, когда фрагмент будет уничтожен и воссоздан заново: анимация скрытия / показа будет воспроизводиться снова, это нехорошо.

Решение 2: Используйте LiveDataEvent внутри sharedVM, чтобы отслеживать отправку и запускать анимации. Но затем, когда фрагмент уничтожается и воссоздается заново: я понятия не имею о предыдущих состояниях представлений

Какой подход был бы лучшим?

Ответ №1:

Я думаю, вам нужно:

  1. вручную восстановите состояние представления (в соответствии с текущим состоянием в LiveData ) при воссоздании фрагмента
  2. заставить view state observer игнорировать изменение, если view в данный момент находится в этом состоянии

Вы можете сделать это в onViewCreated() обратном вызове. Это исправление делает ваше первое решение работоспособным.