📜  在 2131231008 上没有设置 NavController - Java (1)

📅  最后修改于: 2023-12-03 15:37:17.386000             🧑  作者: Mango

在 2131231008 上没有设置 NavController - Java

当你在 Android 应用中引用 Navigation 组件并尝试在运行时导航到新页面时,可能会出现如下错误:

java.lang.IllegalStateException: View androidx.constraintlayout.widget.ConstraintLayout{2131231008 V.E...... ........ 0,0-1080,2040} does not have a NavController set

这意味着未能在该页面上设置 NavController,这是这个页面导航所需的。

为了解决这个问题,你可以尝试以下几个步骤:

确保在 XML 布局文件中设置了 NavController

NavHostFragment 应该被包含在你的 XML 布局文件之一中。该文件应该包含一个 ID,你可以在代码中引用该 ID 以查找 NavHostFragment。

例如,在以下 XML 中,我们使用 NavHostFragment 显示一个目的地为 R.id.destination_fragment 的 Fragment。

<androidx.constraintlayout.widget.ConstraintLayout
    …
    />

    <fragment
        android:id="@+id/my_nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:navGraph="@navigation/my_nav_graph" />

</androidx.constraintlayout.widget.ConstraintLayout>

这个布局中的“my_nav_host_fragment” ID 将用于查找 NavController。

确保正确设置 NavController

要使用 NavController,你应该在代码中调用“findNavController()”,并使用包含 NavHostFragment 的视图来调用该方法。这样,NavController 将被正确设置,以便在运行时导航。

例如,在以下代码片段中,我们使用“my_nav_host_fragment” ID 获取 NavHostFragment,并使用该视图调用“findNavController()”。

NavHostFragment navHostFragment = findFragmentById(R.id.my_nav_host_fragment);
NavController navController = navHostFragment.getNavController();

这样 NavController 就被正确设置,你便可以在代码中使用它以进行导航。

确认启用了 Navigation 组件

最后,确保已添加 Navigation 组件依赖项。在 build.gradle(Module: app) 文件中,应该包含以下依赖项:

dependencies {
    implementation "androidx.navigation:navigation-fragment:2.3.2"
    implementation "androidx.navigation:navigation-ui:2.3.2"
}
总结

如果你的应用程序在运行时出现“未设置 NavController”错误,则需要确认在视图中正确设置了 NavHostFragment,使用正确的 ID 调用了“findNavController()”,并且已正确设置 Navigation 组件的依赖项。