Фрагмент навигации с пользовательской иерархией backstack
Мне нужно создать определенное поведение в какой-то момент в моем приложении. Я использую навигационный ящик и заменяю фрагменты в макете кадра.
Допустим, у меня есть несколько фрагментов в backstack: A -> B -> C.
A - это один из корневых фрагментов в моем приложении. Если нажать кнопку "Назад" на A, приложение закрывается.
Когда я нахожусь на C (с A и B в backstack), я хочу перейти к E с D в backstack. Это означает, что если я нажимаю кнопку "Назад" на E, я хочу перейти к D (D - еще один корневой фрагмент в моем приложении, если я нажимаю кнопку "Назад" на D, приложение закрывается).
Сейчас я очищаю задний стек, затем заменяю текущий фрагмент на D, а затем на E.
Проблема в том, что я вижу фрагмент A в течение небольшого промежутка времени при переходе от C к E. (И это уродливо, верно?)
2 ответа
Чтобы не показывать D при переходе от C к E, вы можете добавить логическое значение, которое отслеживает, был ли D активным в первый раз. Вы проверяете это в D's onActivityCreated
; если это первый раз, когда D был активен (когда вы действительно хотите показать E), не загружайте контент, а затем переверните логическое значение, чтобы вы знали, чтобы загрузить контент в следующий раз, когда D активен.
Первая часть, которую вы можете сделать (C -> E с D на backstack). Просто добавьте оба к одной и той же транзакции:
getFragmentManager().beginTransaction()
.add(R.id.container, FragmentD.newInstance())
.add(R.id.container, FragmentE.newInstance())
.addToBackStack(null)
.commit();
И тогда вы будете плавно переходить к E, не видя D, но D будет на заднем стеке под E.
К сожалению, нет способа удалить элементы из стека, кроме как вытащить их из стека (вы не можете удалить что-либо из нижней части стека).