#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:
Я думаю, вам нужно:
- вручную восстановите состояние представления (в соответствии с текущим состоянием в
LiveData
) при воссоздании фрагмента - заставить view state observer игнорировать изменение, если view в данный момент находится в этом состоянии
Вы можете сделать это в onViewCreated()
обратном вызове. Это исправление делает ваше первое решение работоспособным.