¿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) {

        //...

    }});

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

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

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

1
¿Cuál es la diferencia de esto con las 2 respuestas principales?
FindOutIslamNow
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.