android - DialogFragment 从它导航到另一个片段时关闭
问题描述
目前在我的导航图中,我有对话片段目的地(片段(对话)类型)。当我导航到此对话框然后尝试从此对话框目标导航到另一个片段时,对话框正在关闭,我认为这是可预测的行为。
现在我只导航到这样的下一个片段。
findNavController().popBackStack(R.id.testFragment, true)
我想对话框不关闭,只导航到另一个对话框,如默认片段。我怎样才能做到这一点?
解决方案
根据这个问题,这是按预期工作的:
这里有几个与对话框和片段如何工作有关的问题:
对话框是始终位于活动窗口上方的单独窗口。这意味着无论底层的 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中完成的
因此,当您导航到非对话目标时,预计任何对话目标都会从后台堆栈中弹出。
推荐阅读
- event-receiver - - 事件接收器项目添加 - 保存冲突 - Sharepoint 2019
- android - Android 上的声音(MediaPlayer)不能与振动同时工作
- xcode - Xcode 12 SwiftUI Preview 未突出显示 NavigationView 中嵌入的视图
- xml - 无法使用 powershell 在 xml 中添加新元素
- mfc - 如何将 WebView2 控件添加到 MFC 项目中的 CDialog 资源?
- python - 检查两个条件
- reactjs - 在 Ag-Grid 中显示 PopupMenu
- java - LibGDX:如何在表格中向下增加按钮高度?
- c# - 基于在屏幕上选择/交互的元素输入值 Selenium C#
- authentication - Qliksense Enterprise 身份验证和通过 enigma js 和票证 api 连接到 React