В настоящее время я использую Android Navigation Architecture в своем проекте. В нем есть функция, которая может запускать любой фрагмент с помощью ярлыка. Предположим, мой навигационный граф выглядит так: A->B->C->D. Когда я нахожусь во фрагменте A, я напрямую перехожу к фрагменту D с помощью NavController.navigate(R.id.fragment_d). Но когда я нажимаю кнопку «Назад», он возвращается к фрагменту A. Есть ли способ позволить пункту назначения вернуться к своему родителю в графе навигации? (Я имею в виду, в данном случае, D обратно в C, B, а затем обратно в A). Заранее спасибо.
Android перемещается вверх по правильному графику при использовании NavController
Ответы (2)
Как правило, вам всегда следует избегать создания синтетического обратного стека в вашем собственном приложении (и делать это только при запуске вашего приложения из внешней ссылки вне вашего приложения, т. е. через ярлык приложения).
Однако вы можете подойти к этому одним из двух способов:
Если вас устраивает сброс состояния на A, вы можете использовать NavDeepLinkBuilder. чтобы создать набор намерений, подходящих для перезапуска вашей задачи в выбранном месте назначения:
navController.createDeepLink() .setDestination(R.id.destination_d) .createTaskStackBuilder() .startActivites()
Просто позвоните
navigate()
несколько раз.navController.navigate(R.id.destination_b) navController.navigate(R.id.destination_c) navController.navigate(R.id.destination_d)
Я думаю, вы сможете использовать navControler.navigateUp()
в пункте назначения, если вы правильно ввели родительский фрагмент для своих фрагментов. Кроме того, рассмотрите разницу между кнопкой возврата устройства и стрелкой вверх, чтобы перейти к родительскому элементу.