使用NavDeepLinkBuilder构建片段回退栈

6

我有一个单一活动的应用程序,包含三个片段:A、B和C。在正常的应用程序流程中,片段按顺序打开:A->B->C。 我有一个前台服务,带有一个通知,当点击通知时,应该打开片段C。我使用 Navigation Architecture Component,并将目标作为深度链接添加到通知中:

NotificationCompat.Builder(context, NOTIFICATION_CHANNEL)
    ....
    .setContentIntent(NavDeepLinkBuilder(context)
        .setGraph(R.navigation.main_navigation)
        .setDestination(R.id.fragmentC)
        .setArguments(bundle)
        .createPendingIntent())
    .build()

片段回退栈未构建。当我从片段C返回时,我立即到达片段A,而不是B。 根据导航原则,回退栈应该是自然的,但我似乎无法实现这一点。 我错过了什么吗? 谢谢。


这是 NavGraph 的默认行为。 - Rohit
2个回答

4

我通过对我的导航图进行重构来实现所需的后退堆栈,如NavDeepLinkBuilder参考文献中简要提到的那样,“目标及其所有父项将位于回退堆栈上”,并且“目标的父项是包含导航图的起始目标”。

这两者结合起来意味着后退堆栈将由深度链接目标所属的所有嵌套导航图的起始目标组成。

最初,我只有一个单一的导航图,没有嵌套,而且我的唯一后退堆栈条目是该图形的起始目标。当我将导航图重构为主(外部)导航图和嵌套导航图时,后退堆栈由两个图形的起始目标组成。


-1
为了实现这一点,您需要启动根元素(活动或片段,它启动了堆栈),它将自动恢复到最后添加的片段,但请确保片段已添加到后退栈中。
如果您需要恢复到另一个片段,则可以侦听此意图并重置到所需的事务。

你如何使用NavDeepLinkBuilder启动根元素(activity或fragment)? - Shefchenko
@Shefchenko,https://developer.android.com/reference/kotlin/androidx/navigation/NavController#popBackStack(kotlin.Int,%20kotlin.Boolean) - VolodymyrH
你的链接是关于popBackStack()的,但它并没有启动任何根元素(活动或片段)。 - Shefchenko
@Shefchenko,它具有包含弹出标志。 - VolodymyrH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接