在我的项目中,我有一个主要活动,该活动主持默认的navController。从默认的导航图,我可以导航到所有托管片段。在每个片段的onResume()
方法之后,我检查身份验证状态。如果未通过身份验证,则将用户导航到登录片段。因此,与其检查每个片段中的身份验证状态,这将导致大量代码重复。我想在主要活动的onResume()
方法中检查身份验证状态,然后进行适当导航。我尝试调用navController.navigate($fragmentId)
及其某些变体。它通常导航到目标活动。但是,当我尝试从登录片段导航到另一个片段时,会收到此错误
java.lang.IllegalStateException:片段LoginFragment {de25d51} (1c765036-4d65-41dc-8dec-549281d50db6)}未附加到活动中。
答案 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
的更多信息