Mike Porter
Mike Porter

Reputation: 70

AlertDialog return boolean value

I am trying to include an AlertDialog builder within a method that prompts for a pin code and when the positive button is pressed, checks it against a database value and returns a true or false value to the method caller.

For example: Adding/editing/deleting a user task requires a pin code. I don't want to generate a different AlertDialog for all three (and more) of these actions. I want to wrap the following code within a TaskService class that I can call from any activity, and react based on the result from within that activity.

So TaskService.java would have:

public boolean isCorrectPin(View v){
    AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());

    final EditText editText = new EditText(context);
    builder.setView(editText);

    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            if (editText.getText().toString()) == getPinCode(){
                //return true
            }
        }
    });

    builder.show();
}

and OpenTaskAdapter.java would have:

public void onBindViewHolder(ViewHolder holder, int position){
    holder.btnMarkAsComplete.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){
            if (service.isCorrectPin(v) {
                //complete task
            }
        }
    });
    holder.btnDelete.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){
            if (service.isCorrectPin(v) {
                //delete task
            }
        }
    });

It's important to note that these two button listeners could be in totally different activities.

Upvotes: 1

Views: 3195

Answers (3)

Gourav Samre
Gourav Samre

Reputation: 132

this is how i'm doing :

  public Boolean showAlert(String message)
{
    action = false;

    AlertDialog.Builder alertDialog = new AlertDialog.Builder(HAActivity.this);

    // Setting Dialog Title
    alertDialog.setTitle(getString(R.string.app_name));

    // Setting Dialog Message
    alertDialog.setMessage(message);

    // Setting Icon to Dialog

    // Setting Positive "Yes" Button
    alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog,int which) {

            // Write your code here to invoke YES event
            action = true;
        }
    });

    // Setting Negative "NO" Button
    alertDialog.setNegativeButton("Cancle", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            // Write your code here to invoke NO event
            action = false;
            dialog.cancel();
        }
    });

    // Showing Alert Message
    alertDialog.show();

    return action;
}

and calling function like this : //activity in which you create function

 if (Activity.showAlert("Do you really want to delete ??"))
            {
               //delete it anyway.

            }

Upvotes: -1

Handrata Samsul
Handrata Samsul

Reputation: 786

You can create your own method to generate dialog with listener:

public void isCorrectPin(Context context, String title, String message, String btnPositive, final DialogSingleButtonListener dialogSingleButtonListener) {
    final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context);
    dialogBuilder.setTitle(title);
    dialogBuilder.setMessage(message);
    dialogBuilder.setPositiveButton(btnPositive, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            if (editText.getText().toString() == getPinCode()){
                dialogSingleButtonListener.onButtonClicked(dialog);
            }
        }
    });

    AlertDialog dialog = dialogBuilder.create();
    dialog.show();
}

And the listener class:

public interface DialogSingleButtonListener {   
    public abstract void onButtonClicked(DialogInterface dialog); 
}

And use it like:

service.isCorrectPin(context, title, message, btnPositive
       new DialogSingleButtonListener() {
                @Override
                public void onButtonClicked(DialogInterface dialog) {
                     //code here is only called if they entered a correct pin.
                }
       }

);

Upvotes: 2

Doug Stevenson
Doug Stevenson

Reputation: 317497

A dialog can't "return" a value in the way that it looks like you're expecting. A dialog can make changes to some other object, but you can't have a bit of code block on it and wait for the user to finish interacting with it.

Instead, you'll need to set up listeners for when the prompt dialog is dismissed or buttons or clicked, or whatever other event signals that you have what you need from it. Those listeners can then read the data gathered and set by the dialog.

Upvotes: 2

Related Questions