使用 NavDeepLinkBuilder 构建片段后栈

Fragment backstack building with NavDeepLinkBuilder

我有一个 activity 应用程序,包含三个片段 A、B、C。在正常的应用程序流程中,片段按顺序打开:A->B->C 我有一个带有通知的前台服务,单击时应该打开片段 C。我使用导航架构组件,并将目的地作为深层链接添加到通知中:

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

未构建片段后台堆栈。当我从片段 C 导航回来时,我立即到达片段 A,而不是 B。 根据 Principles of navigation 的说法,backstack 应该是自然的,但我似乎无法做到这一点。 我在这里错过了什么? 谢谢。

为此,您需要启动根元素(activity 或启动堆栈的片段),它会自动将所有内容恢复到最后添加的片段,但请确保将片段添加到后栈。

如果您需要恢复到另一个片段,您可以收听此意图并重置为所需的事务。

我通过将导航图重构为嵌套图实现了所需的后退堆栈。 正如 NavDeepLinkBuilder reference "The destination and all of its parents will be on the back stack." 和 "The parent of the destination is the start destination of the containing navigation graph".

中简短提到的

这两个一起意味着后台堆栈将包含深度链接目的地所属的所有嵌套导航图的起始目的地。

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