导航组件 - 合成返回堆栈

时间:2021-04-20 08:30:33

标签: kotlin android-architecture-components android-architecture-navigation android-navigation-graph android-deep-link

情况:

我的应用程序旨在以下列方式运行-

1.全新安装:

OpeningFragment -> Fragment1 -> Fragment2

2.在 Fragment2 中关闭应用后重新启动应用:

OpeningFragment -> Fragment2

在第二种情况下,我希望 Fragment1 位于后退堆栈中,以便 Fragment2 的向上或后退按钮将我带到 Fragment1 而不是 OpeningFragment。

我尝试过的方法:

1. 使用来自 OpeningFragment 的连续导航():

findNavController().navigate(OpeningFragmentToFragment1)
findNavController().navigate(Fragment1ToFragment2)

问题:虽然这工作正常并给出了预期的结果,但我不确定这种方法是否有任何潜在的错误。它会导致应用程序崩溃吗?从 OpeningFragment 而不是 Fragment1 调用 Fragment1ToFragment2 操作是否危险?

2. 使用深层链接:

nav_main_graph: OpeningFragment (startDestination)

nav_deepLink_graph: Fragment1 (startDestination) -> Fragment2 {deeplink}

i.

findNavController().navigate(Uri.parse(deepLinkUrl))

问题:这会将我带到适当的片段,但同时按下向上和后退按钮会不断重新加载此片段,而不是退出应用程序或至少返回到 OpeningFragment。

ii.

val intent = Intent()
intent.data = Uri.parse(deepLinkUrl)
findNavController().handleDeepLink(intent)

问题:这也将我带到适当的片段,但按后退按钮退出应用程序,按向上按钮将我带到 Fragment1,但 OpeningFragment 闪烁一秒钟。 我希望后退和向上按钮的行为完全相同:只需带我到 Fragment1,没有任何不需要的闪烁。

我的要求: 如果有人可以帮助我解决上述问题或指导我找到更合适的解决方案以达到预期的结果,我将不胜感激。谢谢。

我已经检查并尝试过的一些链接:

  1. Android Navigation library deep linking: How to synthesise backstack
  2. https://issuetracker.google.com/issues/79734195
  3. https://medium.com/swlh/proper-back-stack-on-android-every-time-4a811f8ab78c
  4. 关于导航组件和深层链接的 Android 开发者指南(显式和隐式)

由于保密原因无法分享代码片段,我深表歉意。

0 个答案:

没有答案