我有一个用导航组件构建的应用程序。我的图表中有一个字段,当点击工具栏上的过滤器图标时,它会向上滑动到底部的工作表对话框片段。然而,如果我非常快速地双击工具栏过滤器图标,或者非常快速地单击工具栏过滤器图标和任何其他与导航相关的视图,我的应用程序将崩溃,并显示以下错误消息:
java.lang.IllegalArgumentException: navigation destination com.th3pl4gu3.locky:id/action_Fragment_Card_to_Fragment_View_Card is unknown to this NavController
下面是我的工具栏过滤器图标的代码示例。
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) {
R.id.Toolbar_Filter -> {
findNavController().navigate(CardFragmentDirections.actionFragmentCardToBottomSheetFragmentCardFilter())
true
}
else -> false
}
}
这是导航体系结构组件的正常行为吗?
如果没有,你能给我一个解决方案吗?
currentId
是navGraph中的CardFragment
定义id
fun Fragment.findNavControllerSafety(currentId: Int): NavController? {
try {
val controller = NavHostFragment.findNavController(this)
if (controller.currentDestination?.id != currentId) {
val name = controller.currentDestination?.let {
Utils.getApp().resources.getResourceName(it.id)
} ?: ""
LogLogger.i("Navigation currentDestination not match: $name")
return null
}
return controller
} catch (e: Exception) {
return null
}
}