首页 > 解决方案 > DialogFragment 从它导航到另一个片段时关闭

问题描述

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

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

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

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

标签: androidandroid-fragmentskotlin

解决方案


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

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

  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中完成的

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


推荐阅读