Android 使用NavDeepLinkBuilder的片段后台构建

Android 使用NavDeepLinkBuilder的片段后台构建,android,android-fragments,fragment-backstack,deeplink,navigation-architecture,Android,Android Fragments,Fragment Backstack,Deeplink,Navigation Architecture,我有一个单一的活动应用程序,有三个片段,a、B、C。在正常的应用程序流程中,片段是按顺序打开的:a->B->C 我有一个前台服务,其中包含一个通知,单击该通知时,应打开片段C。我使用导航体系结构组件,并将目的地作为深度链接添加到通知中: NotificationCompat.Builder(context, NOTIFICATION_CHANNEL) .... .setContentIntent(NavDeepLinkBuilder(context) .setGr

我有一个单一的活动应用程序,有三个片段,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。 据我所知,后退应该是自然的,但我似乎无法做到这一点。 我错过了什么?
谢谢。

要实现这一点,您需要启动根元素(启动堆栈的活动或片段),它会自动将所有内容恢复到最后添加的片段,但请确保将片段添加到backbackback


如果您需要恢复到另一个片段,您可以倾听这个意图,只需重置到所需的事务。

我通过将导航图重构为嵌套图实现了所需的回退。 正如“目的地及其所有父对象将位于后堆栈”和“目的地的父对象是包含导航图的起始目的地”中所述

这两种情况加在一起意味着backbackback将由deeplink目的地所属的所有嵌套导航图的起始目的地组成


最初,我有一个单一的导航图,没有嵌套,我唯一的后退项是该图的起始目标。当我将navgraph重构为包含一个主(外部)nav图和一个嵌套图时,backstack由两个图的开始目标组成。

这是navgraph的默认行为如何启动根元素(活动或片段),使用NavDeepLinkBuilder?@Shefchenko,您的链接是用于
popBackStack()
,但这并不是开始任何根元素(活动或片段)。@Shefchenko,它有标志pop