【问题标题】:Unable to find NavController that's inside a DialogFragment无法找到 DialogFragment 中的 NavController
【发布时间】:2019-09-13 21:41:33
【问题描述】:

我有一个包含 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>

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

activity?.findNavController(R.id.add_feeling_nav_host_fragment)
view.findNavController()

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

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

【问题讨论】:

  • 你试过 fragment.findNavController() 了吗?
  • @Man 我做了,是的,没有区别
  • @PavSidhu 请向我们展示包含对话框片段的导航图

标签: android android-dialogfragment android-navigation android-architecture-navigation


【解决方案1】:

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

适当的方法 - 使用NavHostFragment.findNavController(fragment)ktx 扩展fragment.findNavController() 其中fragment 是您的对话框片段。对话框片段应该在其视图膨胀的情况下显示。最好的方法 - 在对话框中。

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

希望对你有帮助。

【讨论】:

    【解决方案2】:

    嗯,首先你应该发布更多代码让我们看到整个画面。一个小细节是导航 xml 中的 &lt;layout&gt;&lt;LinearLayout&gt; 都不需要。片段刚刚好。我建议你看看这个repository,这正是你需要的解决方案。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2015-08-08
      • 1970-01-01
      • 2019-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多