Android 子DialogFragment被父DialogFragment Disclose()解除
使用导航组件,一个Android 子DialogFragment被父DialogFragment Disclose()解除,android,kotlin,android-architecture-navigation,Android,Kotlin,Android Architecture Navigation,使用导航组件,一个片段打开一个对话框片段,它可能会打开第二个对话框片段。取消第一个对话框片段,也将取消第二个对话框片段。但是,我喜欢让第二个对话框fragment保持活动状态,直到is自行解散 也许这是我们的初衷。在我的例子中,它是一个打开自定义共享底部工作表对话框的片段。轻敲一个项目后,下一页被取消。单击某个项目且结果持续时间较长时,将显示加载对话框。加载对话框完成后将自动关闭 因此,层次结构是:MainFragment-ShareDialogFragment-Loading DialogFr
片段
打开一个对话框片段
,它可能会打开第二个对话框片段
。取消第一个对话框片段
,也将取消第二个对话框片段。但是,我喜欢让第二个对话框fragment
保持活动状态,直到is自行解散
也许这是我们的初衷。在我的例子中,它是一个打开自定义共享底部工作表对话框的片段。轻敲一个项目后,下一页被取消。单击某个项目且结果持续时间较长时,将显示加载对话框。加载对话框完成后将自动关闭
因此,层次结构是:MainFragment-ShareDialogFragment-Loading DialogFragment
我尝试使用全局操作而不是对话框到对话框操作导航到加载对话框,但没有任何影响。
在共享底部工作表中使用(其父项)MainFragmentDiretions.action**
导致崩溃。好的,应该是
解决办法是:
MainFragment
打开加载对话框。我更喜欢这两个对话框,这取决于它的父对象如果共享对话框被取消,如何防止加载对话框被取消,而不将更多责任转移到
MainFragment
?我认为您正在将对话框片段的ChildFragmentManager传递给加载的DialogFragment,
可以通过以下两种方式防止取消加载对话框:
1) 通过使用android对话框而不是DialogFragment。
2) 通过传递MainFragment的ChildFragmentManager或活动的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"
}
}
对话框创建另一个对话框是一个糟糕的设计,因此你在与代码搏斗,解决设计问题,而你不会与实现搏斗,真的吗?由于它不是实际的
Dialog
s,它是DialogFragment
s,它是以对话框为主题的Fragment
s。对话框通常是设计中的一个组件,如果是vanilla js,我们将讨论相同的方法,但引用警报方法,我们将引用modals的任何其他框架,类的名称是无关的,组件是相同的。你正在实施一个糟糕的设计,而这个糟糕的设计正在变成一个麻烦的实施,解决了设计问题,实施就会更容易。谢谢你的投入!我实际上正在使用新的导航组件。这可以为我显示片段,更重要的是,显示后堆栈。通过使用fragmentManager绕过这一点,应用程序最终会崩溃。我将尝试使用对话框。