Фрагмент навигации с пользовательской иерархией 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.

К сожалению, нет способа удалить элементы из стека, кроме как вытащить их из стека (вы не можете удалить что-либо из нижней части стека).

Другие вопросы по тегам