首页 > 解决方案 > navigateUp() 和 popBackStack() 的区别

问题描述

我正在创建一个简单的 ToDo 应用程序并检查导航方法以从 AddTask 片段返回到我的 mainFragment。我发现我可以使用 navigateUp() 和 popBackStack() 返回,但我不明白其中的区别。

当我使用这个时:

Navigation.findNavController(it).navigateUp()

或这个:

Navigation.findNavController(it).popBackStack()

我回到 mainFragment,我认为 addTaskFragment 是从堆栈中弹出的,所以有人可以解释一下吗?

标签: androidandroid-studiokotlinnavigation

解决方案


对不起,(编辑:以前)接受的答案是绝对错误navigateUp()的,如果有的话,也会从后台弹出顶部片段。

对于初学者:如果您从应用程序中到达当前目的地,它们的行为完全相同。

仅当您使用来自不同应用的深层链接到达当前目的地时,它们的行为才会有所不同:

navigateUp()将离开您的应用并返回到导航到您应用中的深层链接的应用。

popBackStack()将尝试在您的 backstack 中返回一步,如果没有 backstack 条目,则不会执行任何操作。

您可以阅读以下差异: https://developer.android.com/reference/androidx/navigation/NavController#navigateUp()

navigateUp() 尝试在导航层次结构中向上导航。适用于当用户在应用程序 UI 的左上角(或开始)按下带有向左(或开始)箭头的“向上”按钮时。

当用户没有从应用程序自己的任务到达当前目的地时,Up 的预期行为与 Back 不同。例如,如果用户正在查看当前应用程序中的文档或链接,该活动托管在用户单击链接的另一个应用程序的任务上。在这种情况下,当前活动(由用于创建此 NavController 的上下文确定)将完成,并且用户将在其自己的任务中被带到此应用程序中的适当目的地。

popBackStack() 尝试弹出控制器的后台堆栈。类似于当关联的导航主机具有焦点时用户按下系统后退按钮。


推荐阅读