导航架构组件在进行深层链接后返回导航

时间:2019-02-06 13:04:59

标签: android android-architecture-components android-architecture-navigation

当我从深层链接打开应用程序(用户单击URL)并按返回按钮时,我希望用户导航到导航图中的上一个片段,但它会退出该应用程序。

文档说,向后导航应与用户自然地进入该屏幕的方式相同。

我可以以某种方式在导航图中指定所需的后置堆栈吗?还是可以在深层链接后自动形成堆栈?对于旧版本的库,我发现在向后按该键后,它应该导航到导航图的根目录,但这不会发生。

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

3 个答案:

答案 0 :(得分:2)

我发现这里发生了什么,因为session_list应该转到新的后向堆栈,如果用户自然导航到视图而不是现有的后向堆栈(现有堆栈),则您的应用程序将具有该功能已清除。

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

对于explicit deep links来说有点奇怪。您可以使其执行implicit的操作,但设置explicit则可以执行此操作,否则Intent.FLAG_ACTIVITY_NEW_TASKback button按钮可以做两件事:

  1. navigation up将按照您的期望进行操作,它将返回到应用程序现有的堆栈中并加载该片段。

  2. back buttonup button变成clear,并重新制作一个back stack

如果未设置该标志,则将保留在先前应用程序的任务堆栈上,在该任务堆栈上触发了隐式深层链接。在这种情况下,“返回”按钮可将您带回到上一个应用程序,而“向上”按钮可在导航图内的分层父目标上启动应用程序的任务。

来源:Android Documentation

答案 1 :(得分:1)

如描述here的后退按钮应返回到上一个片段,您可以像下面这样手动在Java中进行设置:button.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.next_fragment, null));

在科特林这样的地方:button.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.next_fragment, null))

  

Android系统维护一个包含最后访问的目的地的后退堆栈。当用户打开应用程序时,您的应用程序的第一个目标位于堆栈上。每次对navigation()方法的调用都会在堆栈顶部放置另一个目标。相反,按下“向上”或“返回”按钮分别调用NavController.navigateUp()和NavController.popBackStack()方法,以将顶部目标弹出堆栈。

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

答案 2 :(得分:0)

根据Google的指南,您提到的行为是正确的行为。

图10上 https://developer.android.com/training/design-navigation/ancestral-temporal