Android导航组件回栈

Posted

技术标签:

【中文标题】Android导航组件回栈【英文标题】:Android navigation component back stack 【发布时间】:2020-09-11 19:12:56 【问题描述】:

我用片段 fragA->fragB->fragC-fragD->fragE->fragF->fragG 创建了一个导航图。从某些推送通知中,用户必须使用findNavController().navigate(R.id.fragG) 直接转到 fragG,当用户点击后退按钮时,他必须转到 fragF,但现在返回到导航图的第一个片段,因为 fragB->fragC-fragD->fragE->fragF不添加到后台堆栈。当用户导航到最后一个按下后退按钮时,可以将此片段添加到堆栈吗?谢谢。

【问题讨论】:

developer.android.com/guide/navigation/navigation-deep-link 在文档中写道,只有开始目的地被添加到后台堆栈,而不是所有片段直到目的地 你试过了吗 是的,只添加起始目的地 【参考方案1】:

这不是官方答案,但可以作为一种解决方法。

您可以通过顺序导航手动创建后台堆栈。

fun openGFromPushNotification()
   navigate(R.id.fragB)
   navigate(R.id.fragC)
   navigate(R.id.fragD)
   navigate(R.id.fragE)
   navigate(R.id.fragF)
   navigate(R.id.fragG)

【讨论】:

谢谢,这对我很有帮助。但令人沮丧的是,这是最好的选择。您必须小心只使用目标 ID R.id.fragB,而不是操作 ID R.id.fragA_to_fragB 或安全参数 FragADirections.actionFragAFragmentToFragBFragment()。只有目标 ID 有效 - 其他 ID 会抛出 Navigation X cannot be found from the current destination 之类的异常。

以上是关于Android导航组件回栈的主要内容,如果未能解决你的问题,请参考以下文章

关于android导航架构组件的问题

Android Fragment 回栈的问题

如何在 Android 应用程序中查找回栈活动?

导航组件 NavDeepLinkBuilder 回栈

图片模式下 Android O 图片的任务列表和回栈

Android 深度链接 - 回栈