2016-12-09 10 views
0

У меня есть одно действие с 3 фрагментами, которые образуют рабочий процесс для сбора пользовательского ввода. Как правило, фрагмент A является первым фрагментом -> запускает B -> запускает C. B. предполагается запустить A, если нажата кнопка «Назад», и аналогичная кнопка «Назад» должна запускаться B.Восстановление фрагмента backstack для фрагмента с двумя возможными путями backstack

Однако в некоторых случае, A должен запускать C напрямую, а затем обратно C снова запустить A.

Я предпочитаю, чтобы C не знал, кто его запустил. То есть Я хочу, чтобы C «backstack» работал без C, зная, кто его запустил.

Я пробовал использовать обычный метод addToBackstack, но перед тем, как действие было убито после того, как пользователь позволяет приложению перейти в фоновый режим, когда C был открыт, я столкнулся с проблемой.

  1. Я хотел бы пользователю вернуться к «C», а не начинать все с А. Для достижения этой цели я использую сохраненное состояние экземпляра, и обнаруживая, который фрагмент ранее был активным, и запускать его из Мероприятия.
  2. Проблема начинается, когда пользователь хочет вернуться с C после того, как действие было восстановлено после его убийства. C не знает, кто запустил его: A или B. Как заставить кнопку «Назад» работать как ожидалось для этого случая?

ответ

0

Найдено некоторые ответы в этом прекрасном видео по Android Developers + Адам Пауэлл: Fragments: Google I/O 2016

В итоге, Fragments и фрагмент BackStack считается частью навигационного состояния приложения, так что, до тех пор, Я не связываюсь со стоп-кадрами при запуске этой операции, ОС также восстановит FragmentBackStack, поэтому BackStack будет знать, кто запустил C (A или B), даже если эта активность будет воссоздана. Таким образом, popBackStack будет перемещаться из C в A или B по мере необходимости.