Как избежать воссоздания фрагментов с помощью компонента архитектуры навигации?

#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 не привязано к действиям. Ящик сам переключает фрагменты