嵌套片段深层链接回栈处理

时间:2020-02-28 21:06:37

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

我的屏幕层次结构如下 [活动1]-> [片段1]-> [片段2]-> [片段3]

我有一个深层链接,应该用[fragment3]打开[Activity1]。 上按时,应导航到[fragment2],然后再上按至[fragment1]

如何在不显示[fragment1]和[fragment2]之前先显示[fragment1]和[fragment2]并将其添加到堆栈中的情况下实现此目标,对我来说是一项昂贵的工作。

2 个答案:

答案 0 :(得分:0)

手动进行

您可以使用onBackPressed()检测到后退按钮,使用getBackStackEntryCount()检查堆栈中是否已有片段,如果没有片段,请替换{{1 }}使用fragment3(不向后栈添加fragment2)。

fragment3重复此操作。您可能想要以一种看起来不太像hack的方式来构建导航。基本上,如果您在导航树上的非根片段上,但是后堆栈为空,请手动替换该片段。

使用图书馆

如果您不想自己编写解决方案,而是希望使用一些标准库来为您解决,那么Jetpack Navigation是您可能要检查的官方选项。

根据文档:

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

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

答案 1 :(得分:0)

制作嵌套图,其中在每个嵌套图中,HOME片段将放在后堆栈中。因此,当您调用最深的片段时,您要制作多个嵌套图,所有它们的归宿都将在您的堆栈中。

enter image description here

在“ deeperlink”嵌套图内:

enter image description here

执行深度链接导航:

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

->不要疯狂地进行深度导航...在混乱之前,在后堆栈上1或2可能就足够了。