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)
【讨论】:
谢谢,这对我很有帮助。但令人沮丧的是,这是最好的选择。您必须小心只使用目标 IDR.id.fragB
,而不是操作 ID R.id.fragA_to_fragB
或安全参数 FragADirections.actionFragAFragmentToFragBFragment()
。只有目标 ID 有效 - 其他 ID 会抛出 Navigation X cannot be found from the current destination
之类的异常。以上是关于Android导航组件回栈的主要内容,如果未能解决你的问题,请参考以下文章