DialogFragment 从它导航到另一个片段时关闭

Are*_*ana 7 android android-fragments kotlin

目前在我的导航图中,我有对话片段目的地(片段(对话)类型)。当我导航到这个对话框,然后尝试从这个对话框目标导航到另一个片段时,对话框正在关闭,在我看来这是可预测的行为。

现在我只是像这样导航到下一个片段。

findNavController().popBackStack(R.id.testFragment, true)

我想不关闭对话框,只导航到另一个对话框,如默认片段。我怎样才能做到这一点?

ian*_*ake 7

根据这个问题,这是按预期工作的:

这里有几个与对话框和片段如何工作有关的问题:

  1. 对话框是始终位于活动窗口上方的单独窗口。这意味着无论底层 FragmentManager 处于什么状态或您执行什么 FragmentTransactions,对话框都将继续拦截系统后退按钮。

  2. 片段容器(即您的正常<fragment>目的地)上的操作不会影响对话框片段。如果您在嵌套的 FragmentManager 上执行 FragmentTransactions,则相同。

Navigation<dialog>支持的初始版本没有考虑这些限制,并且会像对待任何其他目的地一样对待对话目的地,从 Navigation 的角度来看,它们可以放在后堆栈中并像任何其他<fragment>目的地一样对待。

由于实际情况并非如此,我们对 Navigation 2.1.0-alpha06 进行了一些更改,以确保 Navigation 的世界状态与您在屏幕上实际看到的内容相匹配,并防止在评论 #5 中出现类似崩溃。

总而言之,<dialog>当导航到非对话和非活动目的地(例如目的地)时,目的地现在会自动弹出。作为参考,这是在https://android-review.googlesource.com/996359https://android-review.googlesource.com/1007662 中完成的

因此,当您导航到非对话目标时,任何对话目标都会从返回堆栈中弹出。