android - 导航组件隐式深层链接以空的 backstack 打开屏幕
问题描述
我在导航图中创建了一个隐式深层链接。该项目包含多个活动,因此不仅仅是一个活动和一个导航图。导航图包含在单独的活动中。我通过将 传递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>
解决方案
the cause of this problem is navcroller.handledeeplink(intent) if you use single activity with launchmode = single its is necessary to use above code in onNewIntent but if you donot use launchmode = single nav component handles it by itself but you should not use this approach. I use another activity for deeplink and another navgraph and use this link answer2 and problem goes away. [1]: https://www.py4u.net/discuss/653558
推荐阅读
- python - 有没有办法让一个变量可以应用于任何玩家,这取决于谁落在瓷砖上?
- r - 如何使用 ggplot2 在同一绘图区域内绘制绘图的缩放?
- node.js - 如何获取对 Nextjs 服务器的引用
- pine-script - 使用我构建的这段代码,我看不到任何性能结果。有人可以澄清吗?
- php - 如何在 PHP 中解密这个 CryptoJS 加密(提供的函数)
- python - 我是否正确使用装饰器?
- c# - 输入 1 2 5 8 7 3 10 6 4 9,输出 1 2 3 5 7 8 10 6 4 9
- c# - 如何在 asp.net 框架中的 Swagger UI 上添加身份验证令牌而不转换为 asp.net 核心
- django - django-mptt 计算 add_related_count 中的项目?
- flutter - 如何使用 Riverpod Notifier 创建下拉按钮?