#android #kotlin #navigation-drawer #android-architecture-navigation #back-stack
#Android #kotlin #навигация-ящик #android-архитектура-навигация #обратный стек
Вопрос:
У меня есть 4 фрагмента в ящике, давайте назовем их фрагментами A, B, C, D. Я использую навигационную архитектуру для привязки своих фрагментов к ящику.
Фрагмент A — это моя точка входа, и оттуда я могу перемещаться в любом месте ящика.
Предположим, я выбираю путь A> B> C> B> C
Если я нажимаю назад с C, он переходит на B, затем снова на C, а затем на B и, наконец, на A, но я этого не хочу.
Когда я нажимаю кнопку «Назад» из C, я хочу, чтобы она просто возвращалась к B, а затем A без воссоздания фрагментов, которые уже находятся в заднем стеке. Может кто-нибудь, пожалуйста, помогите, как этого добиться?
Комментарии:
1. Затем прекратите использовать фрагменты и навигационную арку… и создайте свой собственный на основе представлений… Так работают фрагменты, и вы ничего не можете с этим поделать
Ответ №1:
Когда я нажимаю кнопку «Назад» из C, я хочу, чтобы она просто возвращалась к B, а затем A без воссоздания фрагментов, которые уже находятся в заднем стеке.
Когда вы переходите к месту назначения, вы можете извлечь старый экземпляр места назначения из заднего стека. Просто добавьте pop inclusive ко всему вашему action
in nav graph.
<!-- Add this in the actions navigating to B -->
app:popUpTo="@id/B"
app:popUpToInclusive="true"
Объяснение
Приведенное выше поведение pop будет заключаться в том, что при переходе, скажем, с> B, он будет извлекать все до B (включительно) из заднего стека и добавлять последний экземпляр B в задний стек.
У A> B> C> B> C будет обратный стек:
A
A, B
A, B, C
A, B
A, B, C
Примечание:
Неотъемлемое предположение здесь заключается в том, что в вашем примере это недопустимый случай.
A> B> C> D> B > C приводит к обратному отслеживанию C> B> D> A. Пожалуйста, имейте в виду, что в приведенном выше решении, когда вы переходите ко второму B, оно также выводит D из вашего заднего стека!
Комментарии:
1. Я согласен с вами, за исключением того, что использование компонентов навигации в drawer не привязано к действиям. Ящик сам переключает фрагменты