Android NavController:导航到默认导航图之外的主 activity 片段

Android NavController: Navigating to a fragment from the main activity outside the default nav graph

在我的项目中,我有一个主 activity 托管默认的 navController。从默认的导航图中,我可以导航到所有托管的片段。我在每个片段的 onResume() 方法之后检查身份验证状态,如果用户未通过身份验证,用户将被导航到登录片段。因此,而不是检查每个片段中的身份验证状态,这将导致大量代码重复。我想检查主要 activity 的 onResume() 方法中的身份验证状态,然后进行适当的导航。我试过调用 navController.navigate($fragmentId) 及其一些变体。它通常导航到目的地activity。但是当我试图从登录片段导航到另一个片段时,我收到了这个错误

java.lang.IllegalStateException: Fragment LoginFragment{de25d51} (1c765036-4d65-41dc-8dec-549281d50db6)} not attached to an activity.

我在 activity 的导航图上创建了一个全局操作 我想像这样导航到

<?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>

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

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

随时阅读有关全球行动的更多信息here