【问题标题】:Nested fragment deep link back stack handling嵌套片段深层链接回栈处理
【发布时间】:2020-02-28 21:06:37
【问题描述】:

我有以下屏幕层次结构 [Activity1] -> [fragment1] -> [fragment2] -> [fragment3]

我有一个深层链接,应该用 [fragment3] 打开 [Activity1]。 在后按时,它应该导航到 [fragment2] 并进一步后按到 [fragment1]

如果不将 [fragment1] 和 [fragment2] 在 [fragment3] 之前显示为预先创建 [fragment1] 和 [fragment2] 并将其添加到后台堆栈,我该如何实现这一点,这对我来说是一项昂贵的工作。

【问题讨论】:

    标签: android navigation fragment deep-linking android-nested-fragment


    【解决方案1】:

    手动操作

    你可以用onBackPressed()检测返回按钮,用getBackStackEntryCount()检查堆栈中是否已经有片段,如果没有,用fragment2替换fragment3 (不添加fragment3 到后台)。

    fragment1 重复此操作。您可能希望以一种看起来不像黑客的方式来构建您的导航。基本上,如果您在导航树上的非根片段上但返回堆栈为空,请手动替换片段。

    使用库

    如果您不想自己编写解决方案,而是更喜欢一些标准库来为您处理它,那么Jetpack Navigation 是您可能想要检查的官方选项。

    根据文档:

    导航组件支持深度链接并重新创建一个 链接到您的任何目的地时,为您提供逼真的后台堆栈 导航图。

    https://developer.android.com/guide/navigation/navigation-principles

    【讨论】:

      【解决方案2】:

      制作嵌套图,在每个嵌套图中,HOME 片段将被放置在 backstack 上。所以当你调用最深的片段时,你制作了多个嵌套图,它们所有的家乡目的地都将在你的后台。

      在“deeperlink”嵌套图内:

      执行深层链接导航:

      make_deep_nav_action.setOnClickListener {
           findNavController().createDeepLink().setDestination(R.id.deepLinkFragmentEnd).createPendingIntent().send()
      }
      

      -> 不要做疯狂的深度导航......在它变得混乱之前,在 backstack 上的 1 或 2 可能就足够了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-15
        • 1970-01-01
        • 2012-11-22
        • 1970-01-01
        相关资源
        最近更新 更多