Display multiple AlertDialogs

I am relatively new to Android / Java. Thanks to Stack Overflow, I was able to learn a lot from the questions asked here. However, I am now stuck in this problem.

I have a password entry AlertDialogthat appears when the application starts. It reads the password from EditTextand compares it with the one stored in the file. I need an extra AlertDialogone that displays when an invalid / invalid password is specified. I also implemented this.

Now this second dialog box has two buttons - Resetand Retry. I want the activity to display the first dialog again when we click Retry. This is where I am ignorant. If someone can provide a working solution and a little explanation, I will be very grateful.

Here is my code:

LayoutInflater li = LayoutInflater.from(context);
View passView = li.inflate(R.layout.authdialog, null);

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);

// set prompts.xml to alertdialog builder
alertDialogBuilder.setView(passView);

final EditText passInput = (EditText) passView.findViewById(
        R.id.editTextDialogUserInput);
final TextView txtv = (TextView) findViewById(R.id.textv);

// set dialog message
alertDialogBuilder
        .setCancelable(false)
        .setPositiveButton("OK", new DialogInterface.OnClickListener() {

            public void onClick(DialogInterface dialog, int id) {
                String data = "";
                try {
                    FileInputStream fis = openFileInput("authfile");

                    InputStreamReader in = new InputStreamReader(fis);
                    BufferedReader br = new BufferedReader(in);
                    data = br.readLine();
                } catch (Exception e) {
                    e.printStackTrace();
                }

                if (data.toString().equals(
                        passInput.getText().toString())) {
                    txtv.setText("You Have Logged in");
                } else {
                    LayoutInflater ln = LayoutInflater.from(context);
                    View invalidView = ln.inflate(R.layout.invdialog,
                            null);
                    AlertDialog.Builder invalidDialogBuild = new AlertDialog.Builder(
                            context);
                    invalidDialogBuild.setView(invalidView);

                    // set dialog message
                    invalidDialogBuild
                            .setCancelable(false)
                            .setPositiveButton(
                                    "Retry",
                                    new DialogInterface.OnClickListener() {

                                        public void onClick(
                                                DialogInterface dialog,
                                                int id) {
                                            dialog.cancel();
                                        }
                                    })
                            .setNegativeButton(
                                    "Reset",
                                    new DialogInterface.OnClickListener() {

                                        public void onClick(
                                                DialogInterface dialog,
                                                int id) {
                                            dialog.cancel();
                                        }
                                    });

                    dialog.cancel();

                    AlertDialog invalidDialog = invalidDialogBuild
                            .create();

                    // show it
                    invalidDialog.show();
                }
            }
        })
        .setNegativeButton("Cancel",
                new DialogInterface.OnClickListener() {

                    public void onClick(DialogInterface dialog, int id) {
                        dialog.cancel();
                    }
                });

// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();

// show it
alertDialog.show();
+5
source share
2 answers

Create two separate methods for your dialogs and call them like I did in the code check below.

 private void dialogShow()
{
    LayoutInflater li = LayoutInflater.from(context);
    View passView = li.inflate(R.layout.authdialog, null);
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
    // set prompts.xml to alertdialog builder
    alertDialogBuilder.setView(passView);
    final EditText passInput = (EditText) passView.findViewById(R.id.editTextDialogUserInput);
    final TextView txtv = (TextView) findViewById(R.id.textv);
    // set dialog message
    alertDialogBuilder.setCancelable(false)
            .setPositiveButton("OK", new DialogInterface.OnClickListener()
            {
            public void onClick(DialogInterface dialog, int id)
            {
                String data = "";
                try
                {
            FileInputStream fis = openFileInput("authfile");                            InputStreamReader in = new InputStreamReader(fis);
                BufferedReader br = new BufferedReader(in);
                data = br.readLine();
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            if (data.toString().equals(passInput.getText().toString()))
                    {
                        txtv.setText("You Have Logged in");
                    }
                    else
                    {
                    RetryDialog();//Call the dialog of retry
                    }
                }
            }).setNegativeButton("Cancel", new DialogInterface.OnClickListener()
            {
                public void onClick(DialogInterface dialog, int id)
                {
                    dialog.cancel();
                }
            });
    // create alert dialog
    AlertDialog alertDialog = alertDialogBuilder.create();
    // show it
    alertDialog.show();
}
    //Shows the Retry Dialog 
private void RetryDialog()
{
     LayoutInflater ln = LayoutInflater.from(context);
     View invalidView = ln.inflate(R.layout.activity_main, null);
    AlertDialog.Builder invalidDialogBuild = new AlertDialog.Builder(context);
    // invalidDialogBuild.setView(invalidView);
    // set dialog message
    invalidDialogBuild.setCancelable(false)
            .setPositiveButton("Retry", new DialogInterface.OnClickListener()
            {
                public void onClick(DialogInterface dialog, int id)
                {
                    dialogShow();
                    dialog.cancel();
                }
            }).setNegativeButton("Reset", new DialogInterface.OnClickListener()
            {
                public void onClick(DialogInterface dialog, int id)
                {
                    dialog.cancel();

                }
            });

    AlertDialog invalidDialog = invalidDialogBuild.create();
    // show it
    invalidDialog.show();

}

Edition:

Dialog with three buttons.

  /**
 * This is method to display dialog with three
 * button("Yes, No and Cancel button")
 */
public void showThreeButtonDialog()
{
    private AlertDialog m_alertDialog;
    private AlertDialog.Builder m_builder = new AlertDialog.Builder(this);
    m_builder.setTitle("Title Text");
    m_builder.setMessage("Dialog Message");
    m_builder.setPositiveButton("yes", new DialogInterface.OnClickListener(){
        @Override
        public void onClick(DialogInterface p_dialog, int p_which)
        {
            Toast.makeText(AlertDialogActivity.this, "Press Yes", Toast.LENGTH_SHORT).show();
        }
    });
    m_builder.setNeutralButton("No"), new DialogInterface.OnClickListener(){
        @Override
        public void onClick(DialogInterface p_dialog, int p_which)
        {
            Toast.makeText(AlertDialogActivity.this, "Press No", Toast.LENGTH_SHORT).show();
        }
    });
    m_builder.setNegativeButton("Cancel"), new DialogInterface.OnClickListener(){
        @Override
        public void onClick(DialogInterface p_dialog, int p_which)
        {
            Toast.makeText(AlertDialogActivity.this, "Press Cancel", Toast.LENGTH_SHORT).show();
        }
    });
    m_alertDialog = m_builder.create();
    m_alertDialog.show();
}
+1
source

Grisha beat me, mine at least shorter ...

private void showLoginDialog(final Context context) {
    LayoutInflater li = LayoutInflater.from(context);
    View passView = li.inflate(R.layout.authdialog, null);
    final EditText passInput = (EditText) passView.findViewById(R.id.editTextDialogUserInput);
    final TextView txtv = (TextView) findViewById(R.id.textv);

    new AlertDialog.Builder(context)
        .setView(passView)
        .setCancelable(false)
        .setPositiveButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                String data = "";
                try {
                    FileInputStream fis = openFileInput("authfile");
                        InputStreamReader in = new InputStreamReader(fis);
                    BufferedReader br = new BufferedReader(in);
                    data = br.readLine();
                } catch (Exception e) {
                    e.printStackTrace();
                }

                if (data.toString().equals(passInput.getText().toString())) {
                    txtv.setText("You Have Logged in");
                } else {
                    dialog.dismiss();
                    showInvalidDialog(context);
                }
            }
        })
        .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                dialog.dismiss();
            }
        })
        .show();
}

private void showInvalidDialog(final Context context) {
    LayoutInflater ln = LayoutInflater.from(context);
    View invalidView = ln.inflate(R.layout.invdialog, null);

    new AlertDialog.Builder(context)
        .setView(invalidView)
        .setCancelable(false)
        .setPositiveButton("Retry", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                dialog.dismiss();
                showLoginDialog(context);
            }
        })
        .setNegativeButton("Reset", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                dialog.dismiss();
            }
        })
        .show();
}

Explanation: Move the code for the two dialogs to separate methods that can call each other. Make consistent use of the builder pattern so that the code is short and elegant. Use dialog.dismiss () instead of dialog.cancel () if you don't want the potential OnCancelListener to be called.

+1
source

All Articles