android - 如何防止 BottomSheetDialogFragment 在导航到另一个片段后关闭?
问题描述
我NavigationComponent
在我的应用程序上使用。
我有一个特定的流程,点击BottomSheetDialogFragment
应用程序的按钮后应该导航到另一个片段。但是当那个 Fragment 被弹出时,我需要导航回上一个BottomSheetDialogFragment
。
由于某种原因,BottomSheetDialogFragment
它被自动解雇。
Frag A : click on a button
Frag A -> Dialog B : click on a button
Frag A -> Dialog B -> Frag C : pop Frag C from the stack
Frag A : Dialog B was automatically dismissed =;/
如何防止这种解雇?
问:为什么我需要BottomSheetDialogFragment
不被解雇?
A:我通过LiveData
. 由于被解雇,BottomSheetDialogFragment
它永远不会收到结果。
解决方案
这是不可能的。对话框目标实现了FloatingWindow 接口,该接口声明:
当您导航到新目的地时,实现此接口的目的地将自动从后台弹出。
因此,当您导航到目的地时,预计对话目的地会自动从后台堆栈中弹出<fragment>
。在多个对话目的地之间导航时不是这种情况(它们可以堆叠在一起)。
这个问题更多地解释了这里的限制,即:
对话框是始终位于活动窗口上方的单独窗口。这意味着无论底层的 FragmentManager 处于什么状态或者你做了什么 FragmentTransactions,对话框都会继续拦截系统返回按钮。
片段容器(即您的正常目的地)上的操作不会影响对话片段。如果您在嵌套的 FragmentManager 上执行 FragmentTransactions 也是如此。
因此,一旦您导航到<fragment>
目的地,系统后退按钮实际工作的唯一方法是弹出所有浮动窗口(否则它们会先拦截后退按钮),因为这些窗口始终浮动在内容之上。
这不是导航组件强加的限制——同样的问题适用于BottomSheetDialogFragment
有关 Fragment 返回堆栈和系统返回按钮的任何用法。
推荐阅读
- vue.js - 从 vue.js 中的 slot 访问组件数据(没有在郊区声明模板)
- reactjs - 使用 ThreeJS 和 React 三纤执行 React 应用程序时出现“编译失败”错误
- python - python sort numpy ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()
- vba - 使用 VBA 自动化 AutoCAD 中的数据
- database - 两个连续的mongodb文档字段之间的区别
- performance - 在项目中同时使用 mokito 和 mockk
- javascript - 不处理响应数据只想使用 fetch 获取响应状态
- blockchain - 我该如何解决这个错误?“找不到命令:傀儡”
- kotlin - 为什么 deviceManger.lockNow() 不会离开屏幕
- python - 提取小时、日和工作日/python时出错