Как сделать так, чтобы после перехода к фрагменту последний фрагмент больше нельзя было перемещать с помощью кнопки «Назад»? - PullRequest
0 голосов
/ 26 мая 2019

У меня есть такая структура навигации:

StaringFragment -> nestedNavGraph
                         |
                   HomeFragment -> SecondFragment

Мне нужно сделать так, чтобы после перехода пользователя от StartingFragment к nestedNavGraph пользователь больше не мог нажимать кнопку «Назад».чтобы вернуться к StartingFragment.

Я в основном выполняю проверку разрешений, и если проверка прошла успешно, я перемещаюсь от StartingFragment к nestedNavGraph с этим кодом:

findNavController(R.id.nav_host_frag).navigate(R.id.nestedNavGraph)

Затем, на стрелке действия между StartingFrag -> nestedNavGraph в редакторе навигационных графов, я установил popUpTo на HomeFragment и включительно true.Я неправильно понял документацию?

Как правильно удалить StartingFragment из бэкстека, как только я ушел от него?

Ответы [ 2 ]

2 голосов
/ 26 мая 2019

Согласно документации , вы устанавливаете app:popUpTo в место назначения, которое вы хотите выложить - вы не хотите выскочить HomeFragment, вы хотите выложить StartingFragment, поэтому вы должны установить свой app:popUpTo к идентификатору StartingFragment.

Обратите внимание, что согласно Принципам навигации , у вас всегда должен быть фиксированный начальный пункт назначения - вам не следует использовать начальный пункт назначения для условной навигации - многие из API в Navigation, например NavigationUI, предположим, что вы правильно следуете Принципам навигации и что начальный пункт назначения вашего графика остается в вашем заднем стеке.

Имейте в виду, что Android восстановит ваше состояние (включая фрагмент, на котором вы находились) при возвращении к вашей активности (скажем, после того, как пользователь вручную отозвал запрошенные вами разрешения) - сам ваш фрагмент (или действие, если разрешение на глобальном уровне требуется на каждом отдельном экране вашего приложения) всегда следует проверять разрешение - вы не можете полагаться на то, что ваш StartingFragment всегда вызывается.

0 голосов
/ 26 мая 2019

Я еще не использовал навигационную библиотеку, но после прочтения этого бита в документации может быть, у вас просто опечатка и вам нужно заменить popTo на popUpTo?

Чтобы отобразить пункты назначения при переходе от одного пункта назначения к другому, добавьте атрибут app: popUpTo к связанному элементу. app: popUpTo сообщает библиотеке навигации, что нужно удалить некоторые места назначения из заднего стека как часть вызова navigate (). Значение атрибута - это идентификатор самого последнего места назначения, которое должно остаться в стеке.

Вы также можете включить app: popUpToInclusive = "true" , чтобы указать, что адресат, указанный в app: popUpTo , также должен быть удален из заднего стека.

...