首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子DialogFragment被父DialogFragment Child ()驳回

子DialogFragment被父DialogFragment Child ()驳回
EN

Stack Overflow用户
提问于 2019-09-08 17:47:38
回答 1查看 892关注 0票数 0

使用导航组件,Fragment打开一个DialogFragment,这可能会打开第二个DialogFragment。解雇第一个DialogFragment,也会解雇第二个。然而,我喜欢让第二个DialogFragment保持活跃,直到自我解散为止。

也许这是意料之中的。在我的例子中,它是一个打开自定义共享底部工作表对话框的片段。当一个项目被点击后,底部的纸张就会被取消。当单击某项并且结果持久时,将显示一个加载对话框。加载对话框在完成时会自行关闭。

因此,层次结构是: MainFragment -共享DialogFragment -加载DialogFragment。

我尝试使用全局操作(而不是对话框到对话框操作)导航到加载对话框,但这没有任何影响。在共享底部表中使用(它的父) MainFragmentDiretions.action**会导致崩溃。很好,应该是的。

解决办法是:

  1. MainFragment打开加载对话框。我不喜欢任何一个DialogFragments,这取决于它的父级。
  2. 当加载对话框被取消时,隐藏在项下的共享底部表,单击并关闭。我也不喜欢这种依赖。
  3. 加载对话框的生命周期不依赖于共享底部表。

如果取消共享对话框,如何防止加载对话框被取消,而不将更多的责任转移给MainFragment

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-08 18:32:47

我认为您正在将对话框片段的ChildFragmentManager传递给加载-对话框框架,您可以使用以下两种方法防止加载对话框被取消:

1)使用android代替DialogFragment。2)通过传递活动的ChildFragmentManager of MainFragment或FragmentManager,下面是一个示例:

代码语言:javascript
复制
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"
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57844384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档