Jetpack Navigation Deep Link 带有错误的 ActionBar 按钮

Jetpack Navigation Deep Link with wrong ActionBar button

当我从启动器图标打开我的应用程序时,所有导航和 ActionBar 按钮都可以正常工作。但是,当我从显式深度 link 访问应用程序时,我的 ActionBar 变得混乱。

我的主导航是:

-> [TaskListFragment] -> [TaskDetailFragment]

通过启动器图标打开时,后退按钮正确显示:

在我的应用中,你可以为每个任务创建一个闹钟,所以当闹钟响起并且用户点击通知时,流程是:

-> [TaskDetailFragment]

然后,它显示错误的按钮: 单击抽屉图标,它 returns 到 [TaskListFragment]。行为正确,但 ActionBar 图标不正确。

这就是我创造深度的方式 link:

NavDeepLinkBuilder(context)
            .setGraph(R.navigation.nav_graph)
            .setDestination(R.id.taskDetailFragment)
            .setArguments(arguments)
            .createPendingIntent()

这是 GitHub 上的完整代码。

MainActivity 包含所有导航样板文件。

my Navigation Graph.

我也尝试了几个基础实现,例如Google的Sunflower和Architecture Components Sample但没有成功。

我打开了一个 Issue Tracker 一旦我认为这是库中的一个错误。

实际上问题是我正在使用 ActionBarDrawerToggle 来制作自定义抽屉动画,并且基于回复该问题的开发人员:

"[...] the Navigation documentation suggests not using ActionBarDrawerToggle at all, as transitions are handled for you"

并且在 Navigation docs:

Note: When using NavigationUI, the top app bar helpers automatically transition between the drawer icon and the Up icon as the current destination changes. You don't need to use ActionBarDrawerToggle.

一旦我需要自定义动画的 ActionBarDrawerToggle,我就无法删除它。要解决此问题,我需要先使用 ActionBarDrawerToggle 定义调用抽屉设置,然后调用导航设置方法,例如 NavigationUI.setupActionBarWithNavController().


TL;DR

如果您将 ActionBarDrawerToggleJetpack Navigation 一起使用,请确保在调用 Navigation 方法之前设置 ActionBarDrawerToggle