Come posso aggiungere un terzo pulsante a una finestra di dialogo di avviso di Android?


Risposte:


136

Questo frammento di codice dovrebbe aiutare a spiegare i tre diversi pulsanti che puoi utilizzare:

    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
Questo deprecato ... dai un'occhiata alla mia risposta.
ninjasense

1
@ninjasense, mi sono reso conto e stavo modificando mentre scrivevi la tua risposta. Grazie!
sahhhm

225

Quando crei la finestra di dialogo, aggiungi qualcosa di simile al generatore:

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 È possibile aggiungere il quarto pulsante alla finestra di dialogo di avviso?
Geek

4
in questo caso - no. Dovresti creare una visualizzazione personalizzata.
AndrewS

La creazione di una finestra di dialogo di avviso personalizzata è più accurata. stackoverflow.com/questions/13341560/…
EJ Chathuranga

50

Aggiungi un numero qualsiasi di pulsanti senza 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
Questa soluzione non consiste nell'aggiungere pulsanti, ad esempio "OK", "Annulla", ecc., Ma piuttosto impostare gli elementi da visualizzare nell'elenco di scelte, ad esempio "Opzione 1", "Opzione 2", ecc. domanda afferma che "l'SDK consente solo un pulsante positivo e negativo", questo non risponde a come superare tale limitazione.
d60402

3
@ d60402 - hai un buon punto, ma se uno sviluppatore che cerca un modo per creare una finestra di dialogo con più di 2 pulsanti trova questa risposta ... Avere questa opzione è molto utile perché è più flessibile con il numero di pulsanti. In altre parole, se i pulsanti positivi e negativi non sono sufficienti per quello che stai facendo, 3 pulsanti potrebbero diventare 4 abbastanza rapidamente. Da qui i voti.
Oded Breiner

@ d60402 Il titolo della domanda è come aggiungere un terzo pulsante, non come mostrare il pulsante neutro.
Boris Treukhov

@ Boris Treukhov - Se la finestra di dialogo ha un pulsante positivo e un pulsante negativo, significa che la finestra di dialogo ha due pulsanti. L'aggiunta del pulsante neutro darebbe alla finestra di dialogo il terzo pulsante. Questo è essenzialmente ciò che stanno facendo le prime due risposte a questa domanda.
d60402

Come mostrato in stackoverflow.com/a/19658646/2914140 , questa soluzione mostrerà i pulsanti quando non è impostato alcun messaggio di dialogo.
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
Qual è la differenza con le prime 2 risposte?
FindOutIslamNow
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.