从通知导航到带有 NavController 的片段
Posted
技术标签:
【中文标题】从通知导航到带有 NavController 的片段【英文标题】:Navigate to fragment with NavController from notification 【发布时间】:2020-08-08 07:00:24 【问题描述】:当用户单击通知时,我需要导航到片段。
如果应用程序正在运行,这可以正常工作。但是,当我退出应用程序,然后单击通知时,它会崩溃并显示以下错误消息:
2020-04-24 18:06:49.607 14832-14832/com.package.name E/androidRuntime: FATAL EXCEPTION: main
Process: com.package.name, PID: 14832
java.lang.IllegalStateException: no current navigation node
at androidx.navigation.NavController.navigate(NavController.java:824)
at androidx.navigation.NavController.navigate(NavController.java:804)
at androidx.navigation.NavController.navigate(NavController.java:790)
at androidx.navigation.NavController.navigate(NavController.java:985)
at com.package.name.core.navigation.NavigationActivity.handleNewIntent(NavigationActivity.kt:358)
at com.package.name.core.navigation.NavigationActivity.onPostCreate(NavigationActivity.kt:257)
at android.app.Instrumentation.callActivityOnPostCreate(Instrumentation.java:1385)
at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3088)
at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:180)
at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:165)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:142)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1906)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6863)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
我的导航代码:
navController.navigate(
navigateToFragment(
someParam = "some value",
someOtherParam = "other value"
)
)
我的 navController 是如何实例化的
private val navController: NavController by lazy
Navigation.findNavController(this, R.id.nav_host_fragment)
我猜这是因为我的 navController 没有正确初始化?任何想法如何解决这个问题/什么是正确的方法?
【问题讨论】:
我认为我们需要查看更多代码。您从哪里导航? 您应该添加 nav_host_fragment xml,这会很有帮助。 【参考方案1】:我找到了解决办法。
缺少的是为我的导航控制器设置起始目的地,如下所示:
graph = navGraph.apply startDestination = destinationId
currentDestination?.let applyDestinationPropertiesToToolbar(it)
【讨论】:
以上是关于从通知导航到带有 NavController 的片段的主要内容,如果未能解决你的问题,请参考以下文章
使用 NavController 从一个活动导航到另一个活动
ios 5 打开一个带有正确 TabBar 和 NavController 包装的特定视图控制器
IllegalArgumentException:此 NavController 未知导航目的地 xxx
带有 FragmentContainerView 的 Null NavHostFragment/NavController