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

时间:2019-10-29 12:59:41

标签: android android-fragments kotlin

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

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

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

我想不关闭对话框,而只导航到另一个对话框,例如默认片段。我该如何实现?

1 个答案:

答案 0 :(得分:1)

根据this issue,它正在按预期方式工作:

  

这里有一些与对话框和片段的工作方式有关的问题:

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

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

  4.   
     

Navigation的<dialog>支持的初始版本未考虑这些限制,因此将对话目标与其他目标一样对待,因为从Navigation的角度来看,它们可以放回堆栈中并像对待其他<fragment>个目的地。

     

实际上并非如此,我们对Navigation 2.1.0-alpha06进行了一些更改,以确保Navigation的世界状态与您在屏幕上实际看到的内容相匹配,并防止像注释#5那样崩溃。

     

其摘要是,导航到非对话和非活动性目的地(例如目的地)时,<dialog>个目的地现在会自动弹出。作为参考,已完成此操作。在https://android-review.googlesource.com/996359https://android-review.googlesource.com/1007662

因此,当您导航至非对话框目标时,所有对话框目标都将从后台堆栈中弹出。