Android NavController:从默认导航图之外的主要活动导航至片段

时间:2020-07-16 12:45:26

标签: android uinavigationcontroller illegalstateexception

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

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

1 个答案:

答案 0 :(得分:0)

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

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

然后在检查身份验证状态后, 我在封闭活动中称这样的nav动作

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

随时阅读有关全局操作here

的更多信息