【问题标题】:findNavController and isolated fragmentfindNavController 和孤立的片段
【发布时间】:2026-01-23 17:35:01
【问题描述】:

我使用显示功能从主片段启动BottomSheetDialogFragment(导航组件无法启动DialogFragments)。

现在在BottomSheetDialogFragment 中,我有一个按钮可以移动到详细活动。

我在图中定义了BottomSheetDialogFragment(隔离),它指向详细活动。

但是当我尝试导航时,它找不到 navController。是否可以将 navController 传递给这个孤立的片段?

MainFragment 到 Detail 正在工作 DialogFragment to Detail 不起作用。

我试过了: - findNavController:未设置导航 - activity.findNavController(...)

【问题讨论】:

  • MainFragment to Detail 正在工作 DialogFragment to Detail 不工作。 它不能工作,因为你使用show 函数打开它。您需要从导航组件开始继续它。如果您使用了show 函数,您最好继续使用它,除非您选择我在下面的回答中建议的解决方法。
  • @IbrahimAli 我使用的所有动画都可以吗?
  • 查看如何使用 nav-comp 设置动画 developer.android.com/guide/navigation/…
  • @IbrahimAli 我过几天试试(我明天要出差)我会发布结果

标签: android android-architecture-components android-architecture-navigation


【解决方案1】:

但当我尝试导航时,却找不到 navController。这就是导航组件的工作原理。

是否可以将 navController 传递给这个孤立的片段?我希望您不要这样做,替换 navController 并不是您的情况的完美解决方案。

怎么办?

您可以将新的nav.xml 与新的父活动和(孤立的)片段作为子活动,并从BottomSheetDialogFragment 导航到(孤立的)片段活动。

否则,我看不出有任何问题阻止您在一个nav.xml 中添加相关片段。

另外你可能需要遵守导航组件的约定,在使用导航组件时不要使用show()函数,你可能会错过一些好处!

你真的不需要显示功能看:-

Android Activity as a dialog

解释:-

您可以拥有一个父活动并将其主题设置为对话框,因此所有片段(在nav.xml 内)都将是对话框..

我之前在我的一个应用中使用过这个技巧。

【讨论】:

  • 我已经有一个用于详细活动的 nav.xml。所以我必须将bottomsheetdialog从主图更改为详细图?
  • @JavierSegoviaCordoba 确实不能解决您的问题。
  • 我必须使用show(),没有它就无法使用DialogFragment
  • @JavierSegoviaCordoba 没有它就无法使用 DialogFragment 不正确。您可以在没有显示功能的情况下使用它。
  • 片段中的这个怎么样:(getActivity() as MyActivity).findNavController