当前在我的导航图中,我有对话框片段目标(Fragment(dialog)类型)。当我导航到该对话框然后尝试从该对话框目标导航到另一个片段时,对话框正在关闭,我认为这是可预测的行为。
现在我只导航到这样的下一个片段。
findNavController().popBackStack(R.id.testFragment, true)
我想不关闭对话框,而只导航到另一个对话框,例如默认片段。我该如何实现?
答案 0 :(得分:1)
根据this issue,它正在按预期方式工作:
这里有一些与对话框和片段的工作方式有关的问题:
对话框是始终位于活动窗口上方的单独窗口。这意味着无论基础FragmentManager处于什么状态或您执行什么FragmentTransactions,对话框都将继续拦截系统后退按钮。
片段容器上的操作(即您的常规
<fragment>
目标)不会影响对话框片段。如果在嵌套的FragmentManager上执行FragmentTransactions,则相同。Navigation的
<dialog>
支持的初始版本未考虑这些限制,因此将对话目标与其他目标一样对待,因为从Navigation的角度来看,它们可以放回堆栈中并像对待其他<fragment>
个目的地。实际上并非如此,我们对Navigation 2.1.0-alpha06进行了一些更改,以确保Navigation的世界状态与您在屏幕上实际看到的内容相匹配,并防止像注释#5那样崩溃。
其摘要是,导航到非对话和非活动性目的地(例如目的地)时,
中<dialog>
个目的地现在会自动弹出。作为参考,已完成此操作。在https://android-review.googlesource.com/996359和https://android-review.googlesource.com/1007662
因此,当您导航至非对话框目标时,所有对话框目标都将从后台堆栈中弹出。