android - 从当前目的地找不到 Navigation IllegalArgumentException
问题描述
获取下一个错误:
Non-fatal Exception: java.lang.IllegalArgumentException: Navigation action/destination com.sai.mand:id/bottom_menu_dialog cannot be found from the current destination a(com.sai.mand:id/bottomMenuDialog) label=BottomMenuDialog
at androidx.navigation.NavController.navigate(NavController.java:931)
at androidx.navigation.NavController.navigate(NavController.java:868)
at androidx.navigation.NavController.navigate(NavController.java:854)
at com.sai.mand.tools.NavigationHelperKt.startMailApp(NavigationHelperKt.java:131)
at com.sai.mand.features.authorizations.list.AuthorizationsListFragment$setupViewModel$5.onChanged(AuthorizationsListFragment.java:144)
at com.sai.mand.features.authorizations.list.AuthorizationsListFragment$setupViewModel$5.onChanged(AuthorizationsListFragment.java:51)
at androidx.lifecycle.LiveData.considerNotify(LiveData.java:131)
at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:149)
at androidx.lifecycle.LiveData.setValue(LiveData.java:307)
at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java:50)
at androidx.lifecycle.LiveData$1.run(LiveData.java:91)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7050)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
但我不明白为什么他发誓他找不到bottom_menu_dialog
,当在错误本身中他指的是fun startMailApp
如果我正确理解了问题的本质。
但无论如何这里是我的 startMailApp 的代码:
fun FragmentActivity.startMailApp(supportEmail: String? = null) {
try {
this.startActivityForResult(Intent(Intent.ACTION_SENDTO)
.apply { data = Uri.parse("mailto:${supportEmail ?: DEFAULT_SUPPORT_EMAIL_LINK}") }, 0
)
} catch (ignored: IllegalStateException) {
} catch (ignored: ActivityNotFoundException) {
} catch (e: Exception) {
Timber.e(e)
}
}
以及它的代码nav_graph
及其使用方式:
<dialog
android:id="@+id/bottomMenuDialog"
android:name="com.sai.mand.features.menu.BottomMenuDialog"
android:label="BottomMenuDialog" />
viewModel.onMoreMenuClickEvent.observe(this, Observer { event ->
event.getContentIfNotHandled()?.let { menuItems ->
navigateToDialog(R.id.bottom_menu_dialog, menuItems)
}
})
fun Fragment.navigateToDialog(actionRes: ResId, bundle: Bundle) {
try {
findNavController().navigate(actionRes, bundle)
} catch (e: Exception) {
Timber.e(e)
}
}
解决方案
推荐阅读
- c# - 实时数据库备份 + 使用 C# 或 Python 自动同步
- c# - 无法连接到 MySQL localhost 服务器 Win32Exception
- python - NLTK 命名实体识别不起作用
- excel - 如何跳过 VBA Excel 邮件合并中的空记录?
- python - 如何在sympy中将真实符号更改为复杂
- javascript - 如何在 Leaflet.js API 中制作访问令牌
- android - 如何处理列表首选项的重复值?
- python - 如何缩放除最后一列以外的所有列?
- java - 重构此代码以不在标头中放置受污染的用户控制数据
- node.js - 在 vue.js 路由器链接中添加下拉菜单