导航架构组件实现深度链接后的返回导航

13

当我从深度链接(用户点击URL)打开应用程序并按下返回按钮时,我希望用户能够导航到导航图中的上一个片段,但实际上它只是退出了应用程序。

文档说后退导航应该与用户自然到达该屏幕的方式相同。

我是否可以在我的导航图中指定所需的回退堆栈?或者深度链接后是否可以自动形成返回堆栈?对于库的旧版本,我发现在后退键按下后,它应该导航到我的导航图的根部,但这并没有发生。

我正在使用Android架构组件中的导航库(版本1.0.0-beta01)。


我遇到了同样的问题,我的使用情况是在某些情况下从应用程序本身触发handleDeeplink方法,根据给定的URL应该着陆在不同的目的地,但是当它进入目的地时,此方法会清除后退堆栈。正如您所提到的,这是导航组件新版本中引入的更改。您是否找到任何相关信息或联系过Google团队? - Kayvan N
2个回答

7
我发现这里发生了什么,对于显式的深度链接,它应该跳转到一个新的后退栈,这就是如果用户自然导航到视图而不是现有后退堆栈,则您的应用所拥有的内容。(现有堆栈被清除)。

当用户通过显式深度链接打开您的应用时,任务回退栈会被清除并替换为深度链接目标。当嵌套图形时,每个嵌套级别的起始目标 - 也就是层次结构中每个元素的起始目标 - 也会加入到堆栈中。这意味着当用户从深度链接目标按下"返回"按钮时,他们会像从应用程序的入口点进入一样向上导航回到导航堆栈。

对于隐式深度链接,情况有些奇怪。您可以让它做与显式深度链接相同的操作,但需要设置Intent.FLAG_ACTIVITY_NEW_TASK,否则返回按钮向上导航按钮将执行两个不同的操作:
  1. 返回按钮的行为如您所预期,它将在您的应用程序现有的后退堆栈中返回并加载该片段。

  2. 然而,向上按钮清除一个后退堆栈并创建一个新的后退堆栈,就像它是一个显式链接一样。

如果未设置此标志,则仍会停留在触发隐式深度链接的先前应用程序的任务堆栈上。在这种情况下,"返回"按钮会将您带回到前一个应用程序,而"向上"按钮则在导航图中的层次结构父目标上启动您的应用程序任务。

来源:Android文档

你能帮我看一下这个问题吗:https://dev59.com/7L7pa4cB1Zd3GeqPqAd8#64740896,谢谢。 - Sam Chen

-1

此处所述,返回按钮应返回到上一个片段,您可以在Java中手动设置如下:button.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.next_fragment, null));

在Kotlin中可以这样写:button.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.next_fragment, null))

Android系统维护着一个包含最后访问目标的后退栈。当用户打开应用程序时,将第一个目标放置在堆栈上。每次调用navigate()方法都会将另一个目标放在堆栈顶部。相反,按Up或Back按钮会分别调用NavController.navigateUp()和NavController.popBackStack()方法,以弹出堆栈顶部的目标。

请确保在托管片段活动中使用NavHostFragment而不是<fragment>


这个问题涉及到深度链接。 - MobDev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接