导航组件 - 合成返回堆栈

问题描述

情况:

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

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 开发者指南(显式和隐式)

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...