【问题标题】:Fragment backstack building with NavDeepLinkBuilder使用 NavDeepLinkBuilder 构建片段回栈
【发布时间】:2020-05-27 13:44:03
【问题描述】:

我有一个单独的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 应该是自然的,但我似乎无法做到这一点。 我在这里想念什么? 谢谢。

【问题讨论】:

  • 这是 NavGraph 的默认行为

标签: android android-fragments fragment-backstack deeplink navigation-architecture


【解决方案1】:

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

这两个一起意味着 backstack 将包含深度链接目标所在的所有嵌套导航图的起始目标。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-12
    • 2021-05-14
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多