Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dismiss AlertDialog from button in custom view

I have util class for dialogs with a function:

public static void buildCustomDialog(Context contextRef, View dialogContentView)
{
    AlertDialog.Builder builder = new AlertDialog.Builder(contextRef);

    builder.setView(dialogContentView);

    builder.setNegativeButton(contextRef.getString(R.string.std_cancel), null);

    AlertDialog dialog = builder.create();

    dialog.show();

}

and the view that I pass it has two buttons with clickListeners. Everything works great EXCEPT that I can't dismiss the dialog when the user clicks one of the custom buttons. So they navigate to another page, hit back and the dialog is still there.

How can I get a reference to the dialog in the custom clickListeners I'm creating before the dialog is made?

I've tried every conceivable option. My latest attempt is to make a custom DialogFragment with a custom interface but even then, the view (and hence the buttons and their listeners) get created before the AlertDialog builder creates the dialog.

I feel like this should be super simple and I'm missing something ...

like image 395
MayNotBe Avatar asked Sep 15 '17 17:09

MayNotBe


1 Answers

You need to set onClick listener on your custom button.

Try this :

   AlertDialog.Builder builder = new AlertDialog.Builder(contextRef);

    builder.setView(dialogContentView);

    Button btnOk= (Button) dialogContentView.findViewById(R.id.btn_ok);

    builder.setNegativeButton(contextRef.getString(R.string.std_cancel), null);

    AlertDialog dialog = builder.create();

    dialog.show();

    btnOk.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            dialog.dismiss();
        }
    });

That's it !!

like image 98
Mayank Sharma Avatar answered Oct 15 '22 11:10

Mayank Sharma