5

我有一个单一的活动应用程序,具有三个片段,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()

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

4

2 回答 2

4

我通过将我的导航图重构为嵌套图来实现所需的后台堆栈。正如在NavDeepLinkBuilder 参考“目的地及其所有父级都将在后堆栈上”中提到的那样,以及“目的地的父级是包含导航图的起始目的地”。

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

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

于 2020-05-28T07:43:54.147 回答
-1

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

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

于 2020-05-27T14:21:59.680 回答