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 设置了相同的设置,但它不是一个对话框,而且运行良好。有什么想法可能是什么问题?谢谢
activity?.findNavController(R.id.add_feeling_nav_host_fragment)不会完成这项工作 - 仅当对话框片段处于活动状态(显示)并且它是活动 UI 容器的一部分时,它才会工作 -DialogFragment在与根导航图不在同一层次结构中的其他窗口实例中工作。
正确的方法是-使用NavHostFragment.findNavController(fragment)或ktx扩展您的对话框片段fragment.findNavController()在哪里。fragment对话框片段应该以其视图膨胀的方式显示。最好的方法是在对话框中。
可能还需要调整导航图 - 由于没有代码,我无法准确判断。
希望能帮助到你。
| 归档时间: |
|
| 查看次数: |
1452 次 |
| 最近记录: |