从 dialogfragment 调用 onBackPressed 完成 activity

Calling onBackPressed from a dialogfragment finishes the activity

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

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

在它的 onClick 方法中,我调用 requireActivity.onBackPress() 这样它就会关闭对话框。

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

在显示为对话框片段的 activity 中,调用 onBackPress 不仅会关闭对话框,还会完成 activity :scary_face

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

想知道我在这里遗漏了什么吗?

对话片段中的代码:

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

启动对话框片段的代码

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

您正在调用 activity 的 onBackPressed(),而不是从 DialogFragment。

因此,您的 activity 正在关闭,因此对话框也会关闭。

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

Fragment 不具有 onBackPressed() 方法,但 Dialog class 具有,因此您需要检查它是否是一个对话框,然后调用该方法,如果可用。