How to know if a dialog is dismissed in Android?
Asked Answered
C

4

34

If the dialog is dismissed,I want to do something for my background.So I want to know if the dialog is dismissed

Colquitt answered 9/7, 2013 at 9:33 Comment(1)
If you do not expect to receive any data but just want to know the dialog is gone perhaps this may help: gist.github.com/CrandellWS/ac79d3864a96344d204d869d64fd1922Meseems
S
84

You can use an 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;
}

If you are using a DialogFragment just override onDismiss()

http://developer.android.com/reference/android/app/DialogFragment.html#onDismiss(android.content.DialogInterface)

Stickinthemud answered 9/7, 2013 at 9:34 Comment(6)
Fantastic BUT it does not get the case of the device being rotated - which kills the dialog. Any ideas?Impious
@JoeBlow When the device is rotated and the activity recreated onCreate will be called and Bundle savedInstanceState will not be equal to null. You can store any state (for example, a boolean whether the dialog was showing before the device was rotated) in onsaveInstanceState and reference it here.Stickinthemud
Great answer. Unfortunately setOnDismissListener is only supported on API 17+. Is there a way for earlier API versions?Adulate
setOnDismissListener has been available since API level 1 I believe. developer.android.com/reference/android/app/…Stickinthemud
Weird, Android Studio kept complaining. Thanks though.Adulate
Is there a way I can find out which dialog existed in a clean way (My activity launches different dialogs for different purposes and all are custom dialogs)?Transpire
A
6

@Ken Wolf has a great answer to this question.

Just wanted to add that onDismissListener was only introduced in API 17. If you are trying to support something lower, you can use onCancelListener, which is not as good but covers cases like backButton and tapping outside of the 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
        }
    });
}
Adulate answered 19/2, 2015 at 17:22 Comment(0)
D
2

I noticed that the onDismissListener is called even when you select one of the options in the alert (Yes/No/Neutral button). For me onCancelListener was the best option since I needed something that tracked an explicit closing of the dialog by clicking outside the alert area.

Demisec answered 7/6, 2018 at 15:13 Comment(0)
T
0

When dialog closed, you can use dialog.setOnDismissListener at the following code with the usage of an updated dialog code.

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
                }
            });

    }
Tryma answered 16/6, 2020 at 20:1 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.