首页 > 解决方案 > 导航组件隐式深层链接以空的 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) 
        }
    }

图的结构基本上是这样的:

深度链接导航到目的地 B。它似乎可以正常工作,但有一个例外 - 当我使用深度链接导航到目的地 B 时,后台堆栈中没有任何内容。因此,如果我使用深度链接打开目标 B,当我按下 时back,活动将关闭。我希望它导航到目的地 A。

我阅读了一些文章和其他答案,建议嵌套图表以避免这种情况(这就是我嵌套图表的原因),但它似乎不起作用。我错过了什么?

更新 我删除了活动中的显式深层链接处理。事实证明,导航组件自己处理它。但是,问题仍然存在,并且导航不会将用户带到上一个屏幕。

活动中的导航图在清单中使用<nav-graph />标记指定,嵌套在活动声明标记中。

<activity
    android:name=".MyActivity"
    android:screenOrientation="portrait">

    <nav-graph android:value="@navigation/my_nav" />

</activity>

标签: androidandroid-architecture-navigationandroid-navigationandroid-deep-link

解决方案


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


推荐阅读