addOnDestinationChangedListener不用于全局操作

Android开发

我的应用程序使用导航控制器进行导航以及使用导航抽屉。我需要检测何时单击导航抽屉中的一个特定菜单项。实现典型的导航视图侦听器将不起作用,因为这会与导航控制器自己的侦听器混在一起。相反,导航控制器具有addOnDestinationChangedListener,我可以使用它来检测目的地何时更改:

navController.addOnDestinationChangedListener { _, destination, _ ->

}

如果我导航到片段,则此方法有效,但如果导航使用全局操作,则它将不起作用。我需要全局操作,因为菜单项将用户从当前活动带到另一个活动。导航控制器实际上确实将我带到了其他活动,但是从未调用过addOnDestinationChangedListener。我需要检测何时将要调用其他活动。

伊沃

很难确定是否不了解yourNavControllerNavHost的初始化方式,但是我认为您使用的NavHostFragment是官方文档。像这样:

<fragment
    android:name="androidx.navigation.fragment.NavHostFragment"
    app:defaultNavHost="true"
    app:navGraph="@navigation/main"
/>

这意味着您的控制器已绑定到的生命周期,NavHostFragment并随活动而销毁,因此在您导航至新活动时也会被销毁。正如OnDestinationChanged仅在到达新目的地之后所调用的NavController那样,您将永远不会收到通知,因为您添加的侦听器在导航完成之前已被销毁。

要获得全局控制器,您需要使用自己applicationContext的javadoc作为NavController建议:https : //developer.android.com/reference/kotlin/androidx/navigation/NavController.html#init(否则,您将拥有内存储存提供的时泄漏Context)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章