无法找到 DialogFragment 中的 NavController

Pav*_*dhu 6 android android-dialogfragment android-navigation android-architecture-navigation

我有一个包含 NavHostFragment 的 BottomSheetDialogFragment,如下所示:

<layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">

    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

        <fragment
                android:id="@+id/add_feeling_nav_host_fragment"
                android:name="androidx.navigation.fragment.NavHostFragment"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                app:defaultNavHost="true"
                app:navGraph="@navigation/add_feeling_graph" />

    </LinearLayout>
</layout>
Run Code Online (Sandbox Code Playgroud)

当我尝试使用以下任一方法在其类中获取 NavController 时:

activity?.findNavController(R.id.add_feeling_nav_host_fragment)
view.findNavController()
Run Code Online (Sandbox Code Playgroud)

第一个选项崩溃,因为它找不到 ID,而第二个选项确实找到了父导航控制器并使用它。

我为另一个 Fragment 设置了相同的设置,但它不是一个对话框,而且运行良好。有什么想法可能是什么问题?谢谢

Pav*_*sha 5

activity?.findNavController(R.id.add_feeling_nav_host_fragment)不会完成这项工作 - 仅当对话框片段处于活动状态(显示)并且它是活动 UI 容器的一部分时,它才会工作 -DialogFragment在与根导航图不在同一层次结构中的其他窗口实例中工作。

正确的方法是-使用NavHostFragment.findNavController(fragment)ktx扩展您的对话框片段fragment.findNavController()在哪里。fragment对话框片段应该以其视图膨胀的方式显示。最好的方法是在对话框中。

可能还需要调整导航图 - 由于没有代码,我无法准确判断。

希望能帮助到你。