我的应用程序使用导航控制器进行导航以及使用导航抽屉。我需要检测何时单击导航抽屉中的一个特定菜单项。实现典型的导航视图侦听器将不起作用,因为这会与导航控制器自己的侦听器混在一起。相反,导航控制器具有addOnDestinationChangedListener,我可以使用它来检测目的地何时更改:
navController.addOnDestinationChangedListener { _, destination, _ ->
}
如果我导航到片段,则此方法有效,但如果导航使用全局操作,则它将不起作用。我需要全局操作,因为菜单项将用户从当前活动带到另一个活动。导航控制器实际上确实将我带到了其他活动,但是从未调用过addOnDestinationChangedListener。我需要检测何时将要调用其他活动。
很难确定是否不了解yourNavController
和NavHost
的初始化方式,但是我认为您使用的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] 删除。
我来说两句