【问题标题】:Android NavController: Navigating to a fragment from the main activity outside the default nav graphAndroid NavController:从默认导航图之外的主要活动导航到片段
【发布时间】:2026-01-14 22:40:02
【问题描述】:

在我的项目中,我有一个托管默认导航控制器的主要活动。从默认导航图中,我可以导航到所有托管片段。我在每个片段的onResume() 方法之后检查身份验证状态,如果用户未通过身份验证,用户将被导航到登录片段。因此,不要检查每个片段中的身份验证状态,这会导致大量代码重复。我想检查主要活动的onResume() 方法中的身份验证状态,然后适当地导航。我试过打电话给navController.navigate($fragmentId) 和它的一些变种。它通常导航到目标活动。但是当我尝试从登录片段导航到另一个片段时,我收到此错误

java.lang.IllegalStateException: 片段 LoginFragment{de25d51} (1c765036-4d65-41dc-8dec-549281d50db6)} 未附加到活动。

【问题讨论】:

    标签: android uinavigationcontroller illegalstateexception


    【解决方案1】:

    我在要导航到的活动的导航图上创建了一个全局操作

    <?xml version="1.0" encoding="utf-8"?>
    <navigation xmlns:app="http://schemas.android.com/apk/res-auto"
                xmlns:tools="http://schemas.android.com/tools"
                xmlns:android="http://schemas.android.com/apk/res/android"
                android:id="@+id/main_nav"
                app:startDestination="@id/mainFragment">
    
      ...
    
      <action android:id="@+id/action_global_mainFragment"
              app:destination="@id/mainFragment"/>
    
    </navigation>
    

    然后在检查身份验证状态后, 我像这样在封闭的活动中调用导航操作

    this.findNavController(R.id.activity_nav_host_fragment).navigate(R.id.action_global_mainFragment)
    

    欢迎阅读更多关于全球行动的信息here

    【讨论】: