我为我的 DialogFragment 定义了一个方法,它将弹出另一个(警报)对话框,我确认用户想要关闭 DialogFragment。如果是这种情况,那么我打电话给DialogFragment.dismiss()
. 如果不是,则应该简单地忽略 DialogFragment 的解除,并且用户应该像以前一样返回到它。
此方法(例如confirmCancel()
)用于 DialogFragment 底部的“取消”按钮。由于我还希望在用户按下后退按钮或触摸 DialogFragment 外部时显示它,因此我将 confirmCancel 设置为它onCancelListener
(当然,我也使用getDialog().setCanceledOnTouchOutside(true)
过)。
这是代码confirmCancel()
:
public void confirmCancel()
{
(new AlertDialog.Builder(getActivity())
.setIcon(R.drawable.ic_baseline_warning_24)
.setTitle("Discard changes")
.setMessage("Are you sure you want to discard changes and go back?")
.setPositiveButton("Yes", ( dialogInterface, i ) -> dismiss())
.setNegativeButton("No", ( dialogInterface, i ) -> {})
.show()).setCanceledOnTouchOutside(true);
}
这几乎可以完美地工作,除了当 AlertDialog 显示在屏幕上时,DialogFragment 已经被解除,并且在 AlertDialog 中采取的操作根本没有用。
所以我现在需要的是一种“取消”解除 DialogFragment 的方法,或者是在解除之前调用的方法。我该如何解决这个问题?
PS:getDialog().setCancelable(false)
对我没有帮助,因为我确实希望取消对话;只是我希望它有条件地取消。