如何知道一个对话框是不是在 Android 中被关闭?
Posted
技术标签:
【中文标题】如何知道一个对话框是不是在 Android 中被关闭?【英文标题】:How to know if a dialog is dismissed in Android?如何知道一个对话框是否在 Android 中被关闭? 【发布时间】:2013-07-06 20:36:25 【问题描述】:如果对话框被关闭,我想为我的背景做点什么。所以我想知道对话框是否被关闭
【问题讨论】:
如果您不希望收到任何数据但只想知道对话框消失了,这可能会有所帮助:gist.github.com/CrandellWS/ac79d3864a96344d204d869d64fd1922 【参考方案1】:您可以使用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()
http://developer.android.com/reference/android/app/DialogFragment.html#onDismiss(android.content.DialogInterface)
【讨论】:
太棒了,但它没有得到设备被旋转的情况 - 这会杀死对话框。有什么想法吗? @JoeBlow 当设备旋转并重新创建活动时,onCreate
将被调用,Bundle savedInstanceState
将不等于 null
。您可以在onsaveInstanceState
中存储任何状态(例如,对话框是否在设备旋转之前显示的布尔值)并在此处引用。
很好的答案。不幸的是,setOnDismissListener
仅支持 API 17+。有没有针对早期 API 版本的方法?
setOnDismissListener
我相信自 API 级别 1 起就可用。 developer.android.com/reference/android/app/…
奇怪,Android Studio 一直在抱怨。不过还是谢谢。【参考方案2】:
@Ken Wolf 对这个问题有很好的回答。
只是想补充一点,onDismissListener
仅在 API 17
中引入。如果你想支持更低的东西,你可以使用onCancelListener
,它不是那么好,但涵盖了 backButton 和在 AlertDialog 之外点击等情况。
http://developer.android.com/reference/android/content/DialogInterface.OnCancelListener.html#onCancel(android.content.DialogInterface)
public Dialog createDialog()
Dialog d = new Dialog(this);
d.setOnCancelListener(new DialogInterface.OnCancelListener()
@Override
public void onCancel(DialogInterface dialog)
// do something
);
【讨论】:
【参考方案3】:我注意到即使您选择警报中的选项之一(是/否/中性按钮),也会调用 onDismissListener
。对我来说,onCancelListener
是最好的选择,因为我需要通过点击警报区域外来跟踪对话框的显式关闭。
【讨论】:
【参考方案4】:当对话框关闭时,您可以在下面的代码中使用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
);
【讨论】:
以上是关于如何知道一个对话框是不是在 Android 中被关闭?的主要内容,如果未能解决你的问题,请参考以下文章
如何检查 android 复选框是不是在其 onClick 方法中被选中(在 XML 中声明)?
如何检查单选按钮是不是在 Android 的单选组中被选中?