【发布时间】:2013-07-06 20:36:25
【问题描述】:
如果对话框被关闭,我想为我的背景做点什么。所以我想知道对话框是否被关闭
【问题讨论】:
-
如果您不希望收到任何数据但只想知道对话框消失了,这可能会有所帮助:gist.github.com/CrandellWS/ac79d3864a96344d204d869d64fd1922
如果对话框被关闭,我想为我的背景做点什么。所以我想知道对话框是否被关闭
【问题讨论】:
您可以使用onDismissListener
http://developer.android.com/reference/android/content/DialogInterface.OnDismissListener.html
public Dialog createDialog() {
Dialog d = new Dialog(this);
d.setOnDismissListener(new OnDismissListener() {
@Override
public void onDismiss(final DialogInterface arg0) {
// do something
}
});
return d;
}
如果您使用的是DialogFragment,只需覆盖onDismiss()
【讨论】:
onCreate 将被调用,Bundle savedInstanceState 将不等于 null。您可以在onsaveInstanceState 中存储任何状态(例如,对话框是否在设备旋转之前显示的布尔值)并在此处引用。
setOnDismissListener 仅支持 API 17+。有没有针对早期 API 版本的方法?
setOnDismissListener 我相信自 API 级别 1 起就可用。 developer.android.com/reference/android/app/…
@Ken Wolf 对这个问题有很好的回答。
只是想补充一点,onDismissListener 仅在 API 17 中引入。如果你想支持更低的东西,你可以使用onCancelListener,它不是那么好,但涵盖了 backButton 和在 AlertDialog 之外点击等情况。
public Dialog createDialog() {
Dialog d = new Dialog(this);
d.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
// do something
}
});
}
【讨论】:
我注意到即使您选择警报中的选项之一(是/否/中性按钮),也会调用 onDismissListener。对我来说,onCancelListener 是最好的选择,因为我需要通过点击警报区域外来跟踪对话框的显式关闭。
【讨论】:
当对话框关闭时,您可以在下面的代码中使用dialog.setOnDismissListener,并使用更新的对话框代码。
private void ShowDialog() {
View view = LayoutInflater.from(ActivityMain.this).inflate(R.layout.dialog, null);
dialog = new Dialog(ActivityMain.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setCancelable(true);
dialog.setCanceledOnTouchOutside(true);
dialog.addContentView(view, new RelativeLayout.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT));
Button dialogBtn = (Button) dialog.findViewById(R.id.button);
dialogBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(final DialogInterface arg) {
//when dialog closed
}
});
}
【讨论】: