当前位置: 首页 > 知识库问答 >
问题:

从通知导航到带有NavController的片段

李昌勋
2023-03-14

当用户单击通知时,我需要导航到一个片段。

如果应用程序正在运行,这可以正常工作。但是,当我退出应用程序,然后单击通知时,它会崩溃,并显示以下错误消息:

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)
}

我想这是因为我的导航控制器没有正确初始化?有什么想法可以解决这个问题/正确的方法是什么?

共有1个答案

姚阳德
2023-03-14

我找到了解决办法。

缺少的是为我的navcontroller设置开始目标,如下所示:

  graph = navGraph.apply { startDestination = destinationId }
  currentDestination?.let { applyDestinationPropertiesToToolbar(it) }
 类似资料:
  • 当我尝试从一个片段导航到另一个片段时,我对新的Android导航架构组件有一个问题,我得到了一个奇怪的错误: 除此之外,其他导航都可以正常工作。 我使用片段的函数findNavController()访问导航控制器。 任何帮助将不胜感激。

  • 我有一个带选项卡的ActionBar/ViewPager布局,有三个选项卡,比如a、B和C。在选项卡C选项卡(片段)中,我添加了另一个片段,比如片段D。 我修改了DFragment的onResume添加按钮中的actionbar: 现在在DFragment中,当我按下hardware(phone)Back按钮时,我返回到选中CFragment的原始选项卡(ABC)布局。如何使用actionbar

  • 如何从Jetpack撰写屏幕转到fragment,从fragment转到Jetpack编写屏幕?我用喷气背包组成导航?有什么帮助吗?

  • 我正在编写一个应用程序,它有一个导航抽屉,并且使用嵌套片段。导航抽屉几乎是按照Android文档创建的——它可以工作。我希望导航抽屉始终可见,这就是为什么我有一个活动,我只是交换片段。其中一个片段是ViewPager,它又有自己的片段作为页面。 导航是这样分层的: 其中片段是,子片段是它的页面。当我刚从抽屉转到时,所有内容都正常工作,但我不知道如何直接切换到给定页面(嵌套片段)。 处理导航抽屉点击

  • 我的主要活动中有一个底部导航栏。通过单击底部导航中的一个选项卡,我想更改视图中的片段。我有以下代码:主要活动: } 我的一个片段: 如果我单击其中一个选项卡,就会显示正确的片段,因此这是可行的。然而,当新片段出现时,我想单击另一个选项卡来显示另一个片段,这就行不通了。底部导航栏不会对单击做出反应。甚至日志。i语句不起作用,因此似乎没有调用导航项SelectedListener。 我对android

  • 我有一个活动a,一个列表片段P和两个片段Q和R。 当应用程序启动时,会创建一个,加载P。根据用户点击的内容,它被Q或R取代。 现在,通过参考本教程,我实现了一个导航抽屉,向用户显示某些项目。然而,由于我在活动中实现了导航抽屉,它显示了所有片段。我希望它只对P可用。 (非常类似于谷歌Gmail应用程序。当用户在主屏幕上时,抽屉就出现了。当用户点击打开电子邮件时,抽屉就会切换到后退按钮) 我不知道如何