Android перемещается вверх по правильному графику при использовании NavController

В настоящее время я использую Android Navigation Architecture в своем проекте. В нем есть функция, которая может запускать любой фрагмент с помощью ярлыка. Предположим, мой навигационный граф выглядит так: A->B->C->D. Когда я нахожусь во фрагменте A, я напрямую перехожу к фрагменту D с помощью NavController.navigate(R.id.fragment_d). Но когда я нажимаю кнопку «Назад», он возвращается к фрагменту A. Есть ли способ позволить пункту назначения вернуться к своему родителю в графе навигации? (Я имею в виду, в данном случае, D обратно в C, B, а затем обратно в A). Заранее спасибо.


person Tung Nguyen Thanh    schedule 20.03.2019    source источник
comment
опубликуйте свою функцию навигации.   -  person VIISHRUT MAVANII    schedule 20.03.2019


Ответы (2)


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

Однако вы можете подойти к этому одним из двух способов:

  1. Если вас устраивает сброс состояния на A, вы можете использовать NavDeepLinkBuilder. чтобы создать набор намерений, подходящих для перезапуска вашей задачи в выбранном месте назначения:

    navController.createDeepLink()
      .setDestination(R.id.destination_d)
      .createTaskStackBuilder()
      .startActivites()
    
  2. Просто позвоните navigate() несколько раз.

    navController.navigate(R.id.destination_b)
    navController.navigate(R.id.destination_c)
    navController.navigate(R.id.destination_d)
    
person ianhanniballake    schedule 20.03.2019
comment
Спасибо за ваш ответ, но он не может решить мою проблему. Первый вариант не работает, второй вариант невозможен, потому что я просто хочу знать последний пункт назначения и не знаю, какой пункт ведет к нему. - person Tung Nguyen Thanh; 20.03.2019
comment
Вам нужно быть более конкретным, когда вы говорите, что это не сработало. Если вы не знаете, какие пункты назначения вы хотите добавить в задний стек, как вы ожидаете узнать, что добавить? Кто-то должен знать :-) - person ianhanniballake; 20.03.2019
comment
Требование состоит в том, чтобы вы могли быстро перейти к любому фрагменту с помощью ярлыка. Естественный способ, если вы хотите перейти к этому фрагменту, визуализируется в графе навигации. (Предположим, что каждый фрагмент хочет использовать ярлыки для навигации, чтобы иметь только одну начальную точку в графе навигации). Итак, что мне нужно в заднем стеке, так это фрагменты, которые могут естественным образом привести к этому месту назначения. - person Tung Nguyen Thanh; 20.03.2019

Я думаю, вы сможете использовать navControler.navigateUp() в пункте назначения, если вы правильно ввели родительский фрагмент для своих фрагментов. Кроме того, рассмотрите разницу между кнопкой возврата устройства и стрелкой вверх, чтобы перейти к родительскому элементу.

person Amir    schedule 31.08.2020