导航组件隐式深层链接打开带有空后台堆栈的屏幕

问题描述

我在导航图中创建了一个隐式深层链接。该项目包含多个活动,因此不仅仅是一个活动和一个导航图。导航图包含在单独的活动中。我通过将 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

相关问答

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