如何知道Android中的对话框是否被解除?

时间:2013-07-09 09:33:01

标签: android dialog dismiss

如果对话框被解除,我想为我的背景做一些事情。所以我想知道对话框是否被解雇

4 个答案:

答案 0 :(得分:55)

您可以使用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)

答案 1 :(得分: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
        }
    });
}

答案 2 :(得分:1)

我注意到,即使您选择了警报中的一个选项(是/否/中性按钮),也会调用onDismissListener。对我来说onCancelListener是最好的选择,因为我需要通过点击警报区域以外的方式跟踪明确关闭对话框。

答案 3 :(得分:0)

关闭对话框后,可以在以下代码中使用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
                }
            });

    }