当我从深度链接(用户点击URL)打开应用程序并按下返回按钮时,我希望用户能够导航到导航图中的上一个片段,但实际上它只是退出了应用程序。
文档说后退导航应该与用户自然到达该屏幕的方式相同。
我是否可以在我的导航图中指定所需的回退堆栈?或者深度链接后是否可以自动形成返回堆栈?对于库的旧版本,我发现在后退键按下后,它应该导航到我的导航图的根部,但这并没有发生。
我正在使用Android架构组件中的导航库(版本1.0.0-beta01)。
当我从深度链接(用户点击URL)打开应用程序并按下返回按钮时,我希望用户能够导航到导航图中的上一个片段,但实际上它只是退出了应用程序。
文档说后退导航应该与用户自然到达该屏幕的方式相同。
我是否可以在我的导航图中指定所需的回退堆栈?或者深度链接后是否可以自动形成返回堆栈?对于库的旧版本,我发现在后退键按下后,它应该导航到我的导航图的根部,但这并没有发生。
我正在使用Android架构组件中的导航库(版本1.0.0-beta01)。
对于隐式深度链接,情况有些奇怪。您可以让它做与显式深度链接相同的操作,但需要设置当用户通过显式深度链接打开您的应用时,任务回退栈会被清除并替换为深度链接目标。当嵌套图形时,每个嵌套级别的起始目标 - 也就是层次结构中每个元素的起始目标 - 也会加入到堆栈中。这意味着当用户从深度链接目标按下"返回"按钮时,他们会像从应用程序的入口点进入一样向上导航回到导航堆栈。
Intent.FLAG_ACTIVITY_NEW_TASK
,否则返回按钮
和向上导航按钮
将执行两个不同的操作:
返回按钮
的行为如您所预期,它将在您的应用程序现有的后退堆栈中返回并加载该片段。
然而,向上按钮
将清除
一个后退堆栈
并创建一个新的后退堆栈,就像它是一个显式链接一样。
来源:Android文档如果未设置此标志,则仍会停留在触发隐式深度链接的先前应用程序的任务堆栈上。在这种情况下,"返回"按钮会将您带回到前一个应用程序,而"向上"按钮则在导航图中的层次结构父目标上启动您的应用程序任务。
如此处所述,返回按钮应返回到上一个片段,您可以在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>
。
handleDeeplink
方法,根据给定的URL应该着陆在不同的目的地,但是当它进入目的地时,此方法会清除后退堆栈。正如您所提到的,这是导航组件新版本中引入的更改。您是否找到任何相关信息或联系过Google团队? - Kayvan N