У меня есть фрагменты X, A, B и я использую компонент архитектуры навигации для навигации между ними.
Фрагменты A, B специфичны, но фрагмент X может быть любым (C, D, ...);
Фрагменты A и B из нижней навигации и их «значки навигации» всегда на экране, это означает, что пользователь может в любой момент перейти к A или B из любого фрагмента (включая A и B):
X -> A -> B
X -> B -> A
A -> B -> X
A -> B -> A
//another ways
Моя проблема в этом случае:
X -> A -> B -> A -> B -> ?
Если пользователь начал с X
, достиг ?
и начал возвращаться с помощью кнопки «назад», он бросает A
, B
несколько раз:
Пользователь нажал назад:
? -> B -> A -> B -> A -> X
Но я хочу «исключить» фрагменты из backstack, еслиони уже на нем:
? -> A -> B -> X
Если пользователь перемещается:
X -> A -> B -> A
Я хочу видеть:
A -> B -> X
Не:
A -> B -> A -> X
Я пытаюсь сделать это с помощью Pop To, но он может вернуть меня только на один конкретный фрагмент.Мне нужно вернуться на начатый фрагмент X, а не в жестком коде.Inclusive and Single top не об этом.
Я не уверен, что смогу сделать это с базовым компонентом навигации, поэтому мне нужен ваш советЕсли я не могу сделать это, каким способом я должен использовать?Есть ли полезные практики по этому поводу?
UPD:
Я использую глобальные точки для навигации между фрагментами.Вот как выглядит моя навигация:
Правая | нижняя цепочка - X, я могу переходить от любого к ней до не измененных фрагментов, используя нижнююнавигации.Это Приложение для одного занятия , для навигации я использую всего лишь:
//Using global points
findNavController(R.id.host).navigate(R.id.toLibrary)