从 dialogfragment 调用 onBackPressed 完成活动

Posted

技术标签:

【中文标题】从 dialogfragment 调用 onBackPressed 完成活动【英文标题】:Calling onBackPressed from a dialogfragment finishes the activity 【发布时间】:2022-01-07 00:16:13 【问题描述】:

我有一个对话框片段,上面有一个关闭按钮。

这个对话框是从两个不同的活动中调用的。一种将其用作简单片段,另一种用作对话片段。

在它的 onClick 方法中,我调用了requireActivity.onBackPress(),所以它会关闭对话框。

我不想调用dismiss,因为我有一个用例,我希望调用活动处理它(显示确认对话框)。

在将其显示为对话框片段的活动中,调用onBackPress不仅会关闭对话框,还会结束活动:scary_face

按下实际的后退按钮只是将其关闭。

对我在这里缺少什么有什么想法吗?

对话框片段中的代码:

viewBinding.closeBtn.setOnClickListener 
     requireActivity().onBackPressed()

启动对话框片段的代码

SharePatientDialogFragment.newInstance(shareData)
                    .show(context.supportFragmentManager, "share")

【问题讨论】:

发布您的代码 :) @gcantoni 我添加了一些,虽然真的没有那么多可以分享 【参考方案1】:

您调用的是活动的onBackPressed(),而不是来自 DialogFragment。

因此,您的活动正在关闭,因此对话框也正在关闭。

要修复它,您必须调用对话框片段的onBackPressed() 以确保对话框片段被解除。

Fragment 没有onBackPressed() 方法,但Dialog 类有,因此您需要检查它是否是对话框,然后在可用时调用该方法。

【讨论】:

片段没有onBackPressed() 嗯,这是公认的答案,但我想强调一下。虽然片段没有onBackPressed 对话框!所以我需要检查这是否是一个对话框并调用dialog?.onBackPressed,如果一个对话框为空我调用activity.onBackPressed() 确实,我应该说清楚你需要检查它是否真的是一个对话框

以上是关于从 dialogfragment 调用 onBackPressed 完成活动的主要内容,如果未能解决你的问题,请参考以下文章

从 DialogFragment 调用的 AsyncTask 中的 ProgressDialog 未显示

从 dialogfragment 调用 onBackPressed 完成活动

使用 DialogFragment 从布局 xml 调用方法。它是如何工作的?

DialogFragment是从Activity还是Fragment打开的?

侦听DialogFragment从ViewPager Fragment中删除事件

DialogFragment 调用失败