问题描述
我在导航图中创建了一个隐式深层链接。该项目包含多个活动,因此不仅仅是一个活动和一个导航图。导航图包含在单独的活动中。我通过将 Uri
传递给它来启动它,使用 Intent.setData()
, 然后当它启动时,我按以下方式处理它:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
...
if (savedInstanceState == null) {
val navHostFragment = supportFragmentManager.findFragmentById(R.id.my_nav) as NavHostFragment
val navController = navHostFragment.navController
// See the update. This is no longer used
navController.handleDeepLink(intent)
}
}
图的结构基本是这样的:
- 主图
- 目的地 A(主图开始目的地)
- 嵌套图 1
- 目的地 B(嵌套图 1 开始目的地)
- 目的地 C
- 嵌套图 2
- 目的地 D
- 目的地 E
深层链接导航到目标 B。它似乎工作正常,但有一个例外 - 当我使用深层链接导航到目标 B 时,返回堆栈中没有任何内容。因此,如果我使用深层链接打开目的地 B,当我按下 back
时,活动将关闭。我希望它导航到目的地 A。
我阅读了一些文章和其他答案,其中建议嵌套图形以避免这种情况(这就是我嵌套图形的原因),但是它似乎不起作用。我错过了什么?
更新 我删除了活动中的显式深层链接处理。结果是导航组件自己处理它。但是问题仍然存在,返回导航不会将用户带到上一个屏幕。
活动中的导航图使用 <nav-graph />
标记在清单中指定,嵌套在活动声明标记中。
<activity
android:name=".MyActivity"
android:screenorientation="portrait">
<nav-graph android:value="@navigation/my_nav" />
</activity>
解决方法
这个问题的原因是navcroller.handledeeplink(intent) 如果您使用带有 launchmode = single 的单个活动,则有必要在 onNewIntent 中使用上面的代码,但如果您不使用 launchmode = single nav 组件会自行处理它,但您不应该使用这种方法。 我将另一个活动用于深层链接和另一个导航图 并使用此链接 answer2 和问题消失。 [1]:https://www.py4u.net/discuss/653558