当我从深层链接打开应用程序(用户单击URL)并按返回按钮时,我希望用户导航到导航图中的上一个片段,但它会退出该应用程序。
文档说,向后导航应与用户自然地进入该屏幕的方式相同。
我可以以某种方式在导航图中指定所需的后置堆栈吗?还是可以在深层链接后自动形成堆栈?对于旧版本的库,我发现在向后按该键后,它应该导航到导航图的根目录,但这不会发生。
我正在使用Android体系结构组件(版本1.0.0-beta01)中的导航库。
答案 0 :(得分:2)
我发现这里发生了什么,因为session_list
应该转到新的后向堆栈,如果用户自然导航到视图而不是现有的后向堆栈(现有堆栈),则您的应用程序将具有该功能已清除。
当用户通过显式深层链接打开您的应用程序时,将清除任务后退堆栈,并将其替换为深层链接目标。嵌套图形时,还将每个嵌套级别的起始目标(即,层次结构中每个元素的起始目标)添加到堆栈中。这意味着,当用户从深层链接目标按下“返回”按钮时,他们将在导航堆栈中向上导航,就像从应用程序的入口点进入您的应用一样。
对于explicit deep links
来说有点奇怪。您可以使其执行implicit
的操作,但设置explicit
则可以执行此操作,否则Intent.FLAG_ACTIVITY_NEW_TASK
和back button
按钮可以做两件事:
navigation up
将按照您的期望进行操作,它将返回到应用程序现有的堆栈中并加载该片段。
back button
将up button
变成clear
,并重新制作一个back stack
。
如果未设置该标志,则将保留在先前应用程序的任务堆栈上,在该任务堆栈上触发了隐式深层链接。在这种情况下,“返回”按钮可将您带回到上一个应用程序,而“向上”按钮可在导航图内的分层父目标上启动应用程序的任务。
答案 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