从 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打开的?