使用 NavDeepLinkBuilder 构建 Fragment backstack

vok*_*kod 5 android android-fragments fragment-backstack deeplink navigation-architecture

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

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

未构建片段后台堆栈。当我从片段 C 导航回来时,我立即到达片段 A,而不是 B。根据导航原则, backstack 应该是自然的,但我似乎无法实现。我在这里缺少什么?谢谢你。

vok*_*kod 4

我通过将导航图重构为嵌套图来实现所需的返回堆栈。正如NavDeepLinkBuilder 参考文献中不久提到的“目的地及其所有父级将位于返回堆栈上。”和“目的地的父级是包含导航图的起始目的地”。

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

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