Como posso adicionar um terceiro botão a uma caixa de diálogo de alerta do Android?

118

A API diz que o Diálogo de Alerta pode ter um, dois ou três botões, mas o SDK permite apenas um botão positivo e um botão negativo. Como posso adicionar um terceiro botão?

Ashok Kumar
fonte
Relacionado:
Caixa de
@Suragch resposta útil para uma visão geral completa
FindOutIslamNow

Respostas:

136

Este snippet de código deve ajudar a explicar os três botões diferentes que você pode usar:

    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
fonte
29
Este obsoleto ... dê uma olhada na minha resposta.
ninjasense de
1
@ninjasense, percebi e estava editando enquanto você escrevia sua resposta. Obrigado!
sahhhm
225

Ao criar a caixa de diálogo, adicione algo assim ao construtor:

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
fonte
2
@ninjasense É possível adicionar o 4º botão ao diálogo de alerta?
Geek de
4
neste caso - não. Você deve fazer uma visualização personalizada.
AndrewS
A criação de uma caixa de diálogo de alerta personalizado é mais precisa. stackoverflow.com/questions/13341560/…
EJ Chathuranga
50

Adicione qualquer número de botões sem 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();
Oded Breiner
fonte
3
Esta solução não é adicionar botões, por exemplo, "OK", "Cancelar", etc., mas sim definir os itens a serem exibidos na lista de opções, por exemplo, "Opção 1", "Opção 2", etc. pergunta menciona que "o SDK permite apenas um botão positivo e negativo", isso não responde como superar essa limitação.
d60402
3
@ d60402 - você tem um bom argumento, mas se um desenvolvedor procurando uma maneira de criar um diálogo com mais de 2 botões se deparar com esta resposta ... Ter esta opção é muito útil porque é mais flexível com o número de botões. Em outras palavras, se os botões positivos e negativos não forem suficientes para o que você está fazendo, 3 botões podem se tornar 4 muito rapidamente. Daí os votos.
Oded Breiner
@ d60402 O título da pergunta é como adicionar um terceiro botão, não como mostrar o botão neutro.
Boris Treukhov
@Boris Treukhov - Se a caixa de diálogo tiver um botão positivo e um botão negativo, significa que a caixa de diálogo tem dois botões. Adicionar o botão neutro daria ao diálogo o terceiro botão. Isso é essencialmente o que as duas principais respostas a essa pergunta estão fazendo.
d60402
Conforme mostrado em stackoverflow.com/a/19658646/2914140 , esta solução mostrará botões quando não houver mensagem de diálogo definida.
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
fonte
1
Qual é a diferença disso com as 2 respostas principais?
FindOutIslamNow