¿Cómo puedo agregar un tercer botón a un cuadro de diálogo de alerta de Android?

Respuestas:

136

Este fragmento de código debería ayudar a explicar los tres botones diferentes que puede utilizar:

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

    alertDialog.setTitle("Dialog Button");

    alertDialog.setMessage("This is a three-button dialog!");

    alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "Button 1 Text", new DialogInterface.OnClickListener() {

      public void onClick(DialogInterface dialog, int id) {

        //...

    } }); 

    alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "Button 2 Text", new DialogInterface.OnClickListener() {

      public void onClick(DialogInterface dialog, int id) {

        //...

    }}); 

    alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "Button 3 Text", new DialogInterface.OnClickListener() {

      public void onClick(DialogInterface dialog, int id) {

        //...

    }});
sahhhm
fuente
29
Esto en desuso ... echa un vistazo a mi respuesta.
ninjasense
1
@ninjasense, me di cuenta y estaba editando mientras escribías tu respuesta. ¡Gracias!
sahhhm
225

Cuando esté creando el diálogo, agregue algo como esto al constructor:

builder = new AlertDialog.Builder(context);
builder.setTitle("Test");
builder.setIcon(R.drawable.icon);
builder.setMessage("test");
builder.setPositiveButton("Call Now",
        new DialogInterface.OnClickListener()
        {
            public void onClick(DialogInterface dialog, int id)
            {
                dialog.cancel();
            }
        });

builder.setNeutralButton("Setup",
        new DialogInterface.OnClickListener()
        {
            public void onClick(DialogInterface dialog, int id)
            {
                context.startActivity(new Intent(context, Setup.class));
                //dialog.cancel();
            }
        });

builder.setNegativeButton("Exit",
        new DialogInterface.OnClickListener()
        {
            public void onClick(DialogInterface dialog, int id)
            {
                dialog.cancel();
            }
        });
builder.create().show();
ninjasense
fuente
2
@ninjasense ¿Es posible agregar el cuarto botón al diálogo de alerta?
Geek
4
en este caso, no. Deberías hacer una vista personalizada.
AndrewS
La creación de un cuadro de diálogo de alerta personalizado es más precisa. stackoverflow.com/questions/13341560/…
EJ Chathuranga
50

Agregue cualquier número de botones sin xml:

    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setTitle("Title");
    builder.setItems(new CharSequence[]
            {"button 1", "button 2", "button 3", "button 4"},
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    // The 'which' argument contains the index position
                    // of the selected item
                    switch (which) {
                        case 0:
                            Toast.makeText(context, "clicked 1", 0).show();
                            break;
                        case 1:
                            Toast.makeText(context, "clicked 2", 0).show();
                            break;
                        case 2:
                            Toast.makeText(context, "clicked 3", 0).show();
                            break;
                        case 3:
                            Toast.makeText(context, "clicked 4", 0).show();
                            break;
                    }
                }
            });
    builder.create().show();
Breiner de Oded
fuente
3
Esta solución no consiste en agregar botones, por ejemplo, "Aceptar", "Cancelar", etc., sino configurar los elementos que se mostrarán en la lista de opciones, por ejemplo, "Opción 1", "Opción 2", etc. La pregunta menciona que "el SDK solo permite un botón positivo y negativo", esto no responde cómo superar esa limitación.
d60402
3
@ d60402: tiene un buen punto, pero si un desarrollador que busca una forma de crear un diálogo con más de 2 botones se encuentra con esta respuesta ... Tener esta opción es muy útil porque es más flexible con la cantidad de botones. Para decirlo de otra manera, si los botones positivos y negativos no son suficientes para lo que está haciendo, 3 botones pueden convertirse en 4 rápidamente. De ahí los votos.
Oded Breiner
@ d60402 El título de la pregunta es cómo agregar un tercer botón, no cómo mostrar el botón neutral.
Boris Treukhov
@Boris Treukhov: si el cuadro de diálogo tiene un botón positivo y un botón negativo, eso significa que el cuadro de diálogo tiene dos botones. Agregar el botón neutral le daría al diálogo el tercer botón. Esto es esencialmente lo que están haciendo las dos respuestas principales a esta pregunta.
d60402
Como se muestra en stackoverflow.com/a/19658646/2914140 , esta solución mostrará botones cuando no haya un mensaje de diálogo configurado.
CoolMind
5
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                    this);

            // set title
            alertDialogBuilder.setTitle("To Do List");

            // set dialog message
            alertDialogBuilder
                    .setMessage("What do you want?")
                    .setCancelable(false)
                    .setPositiveButton("Delete All", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            // if this button is clicked, close
                            // current activity




                            dialog.cancel();


                        }
                    }).setNeutralButton("Delete", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    // if this button is clicked, close
                    // current activity




                    dialog.cancel();

                }
            })
                    .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            // if this button is clicked, just close
                            // the dialog box and do nothing

                            dialog.cancel();
                        }
                    });

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

            // show it
            alertDialog.show();
Nirav Bhavsar
fuente
1
¿Cuál es la diferencia de esto con las 2 respuestas principales?
FindOutIslamNow