子 DialogFragment 被父 DialogFragment dismiss() 解散
Child DialogFragment is dismissed by parent DialogFragment dismiss()
使用导航组件,一个 Fragment
打开一个 DialogFragment
,这可能会打开第二个 DialogFragment
。关闭第一个 DialogFragment
也会关闭第二个。但是,我想让第二个 DialogFragment
保持活动状态,直到它自行消失。
可能这是预期的。在我的例子中,它是一个片段,用于打开自定义共享底部 Sheet 对话框。点击项目后,底部 sheet 将被关闭。单击某个项目并且结果持久时,将显示一个加载对话框。加载对话框在完成后自动消失。
因此,层次结构是:MainFragment - 共享 DialogFragment - 加载 DialogFragment。
我试过使用全局操作而不是对话框到对话框操作导航到加载对话框,但这没有任何影响。
在共享底部 sheet 中使用(它的父级)MainFragmentDiretions.action**
导致崩溃。不错,应该的。
解决方案是:
让MainFragment
打开加载对话框。根据其父级,我不喜欢 DialogFragments。
在项目单击时隐藏共享底部 sheet,并在关闭加载对话框时关闭。我也不喜欢这种依赖。
- 加载对话框的生命周期不依赖于共享底部sheet。
如果关闭共享对话框,如何防止加载对话框被关闭,而不将更多责任转移给 MainFragment
?
我认为您正在将对话框片段的 ChildFragmentManager 传递给您的 loading-DialogFragment,
您可以通过两种方式防止加载对话框被关闭:
1) 通过使用 android 对话框而不是 DialogFragment。
2) 通过传递 MainFragment 的 ChildFragmentManager 或 activity 的 FragmentManager,这里有一个例子:
class MainFragment : Fragment() {
fun displayDataDialog() {
DataDialogFrag().show(childFragmentManager, DataDialogFrag.TAG)
}
}
class DataDialogFrag : DialogFragment() {
fun displayLoadingDialog() {
val loading = LoadingDialog()
if (parentFragment != null) {
loading.show(parentFragment!!.childFragmentManager, LoadingDialog.TAG)
} else {
loading.show(fragmentManager, LoadingDialog.TAG)
}
}
companion object {
const val TAG = "data_dialog"
}
}
class LoadingDialog : DialogFragment() {
companion object {
const val TAG = "loading_dialog"
}
}
使用导航组件,一个 Fragment
打开一个 DialogFragment
,这可能会打开第二个 DialogFragment
。关闭第一个 DialogFragment
也会关闭第二个。但是,我想让第二个 DialogFragment
保持活动状态,直到它自行消失。
可能这是预期的。在我的例子中,它是一个片段,用于打开自定义共享底部 Sheet 对话框。点击项目后,底部 sheet 将被关闭。单击某个项目并且结果持久时,将显示一个加载对话框。加载对话框在完成后自动消失。
因此,层次结构是:MainFragment - 共享 DialogFragment - 加载 DialogFragment。
我试过使用全局操作而不是对话框到对话框操作导航到加载对话框,但这没有任何影响。
在共享底部 sheet 中使用(它的父级)MainFragmentDiretions.action**
导致崩溃。不错,应该的。
解决方案是:
让
MainFragment
打开加载对话框。根据其父级,我不喜欢 DialogFragments。在项目单击时隐藏共享底部 sheet,并在关闭加载对话框时关闭。我也不喜欢这种依赖。
- 加载对话框的生命周期不依赖于共享底部sheet。
如果关闭共享对话框,如何防止加载对话框被关闭,而不将更多责任转移给 MainFragment
?
我认为您正在将对话框片段的 ChildFragmentManager 传递给您的 loading-DialogFragment, 您可以通过两种方式防止加载对话框被关闭:
1) 通过使用 android 对话框而不是 DialogFragment。 2) 通过传递 MainFragment 的 ChildFragmentManager 或 activity 的 FragmentManager,这里有一个例子:
class MainFragment : Fragment() {
fun displayDataDialog() {
DataDialogFrag().show(childFragmentManager, DataDialogFrag.TAG)
}
}
class DataDialogFrag : DialogFragment() {
fun displayLoadingDialog() {
val loading = LoadingDialog()
if (parentFragment != null) {
loading.show(parentFragment!!.childFragmentManager, LoadingDialog.TAG)
} else {
loading.show(fragmentManager, LoadingDialog.TAG)
}
}
companion object {
const val TAG = "data_dialog"
}
}
class LoadingDialog : DialogFragment() {
companion object {
const val TAG = "loading_dialog"
}
}