Wie kann ich einem Android-Warndialog eine dritte Schaltfläche hinzufügen?

118

Die API gibt an, dass der Warnungsdialog eine, zwei oder drei Schaltflächen enthalten kann, das SDK jedoch nur eine positive und eine negative Schaltfläche zulässt. Wie kann ich dann eine dritte Schaltfläche hinzufügen?

Ashok Kumar
quelle
@ Suragch nützliche Antwort für eine vollständige Übersicht
FindOutIslamNow

Antworten:

136

Dieses Code-Snippet soll Ihnen helfen, die drei verschiedenen Schaltflächen zu erläutern, die Sie verwenden können:

    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
quelle
29
Dies ist veraltet ... werfen Sie einen Blick auf meine Antwort.
Ninjasense
1
@ninjasense, ich habe es bemerkt und habe es bearbeitet, als du deine Antwort geschrieben hast. Vielen Dank!
Sahhhm
225

Fügen Sie dem Builder beim Erstellen des Dialogfelds Folgendes hinzu:

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
quelle
2
@ninjasense Ist es möglich, die 4. Schaltfläche zum Warndialog hinzuzufügen?
Geek
4
in diesem Fall - nein. Sie sollten eine benutzerdefinierte Ansicht erstellen.
AndrewS
Das Erstellen eines benutzerdefinierten Warndialogs ist genauer. stackoverflow.com/questions/13341560/…
EJ Chathuranga
50

Fügen Sie eine beliebige Anzahl von Schaltflächen ohne XML hinzu:

    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
quelle
3
Diese Lösung fügt keine Schaltflächen hinzu, z. B. "OK", "Abbrechen" usw., sondern legt die Elemente fest, die in der Auswahlliste angezeigt werden sollen, z. B. "Option 1", "Option 2" usw. Seit dem In der Frage wird erwähnt, dass "das SDK nur eine positive und eine negative Schaltfläche zulässt". Dies beantwortet nicht, wie diese Einschränkung überwunden werden kann.
d60402
3
@ d60402 - Sie haben einen guten Punkt, aber wenn ein Entwickler, der nach einer Möglichkeit sucht, einen Dialog mit mehr als 2 Schaltflächen zu erstellen, auf diese Antwort stößt ... Diese Option ist sehr nützlich, da sie flexibler mit der Anzahl der Schaltflächen ist. Anders ausgedrückt: Wenn positive und negative Tasten für Ihre Arbeit nicht ausreichen, werden aus 3 Tasten möglicherweise ziemlich schnell 4. Daher die Stimmen.
Oded Breiner
@ d60402 Der Titel der Frage lautet, wie eine dritte Schaltfläche hinzugefügt wird und nicht, wie die neutrale Schaltfläche angezeigt wird.
Boris Treukhov
@ Boris Treukhov - Wenn der Dialog eine positive und eine negative Schaltfläche hat, bedeutet dies, dass der Dialog zwei Schaltflächen hat. Durch Hinzufügen der neutralen Schaltfläche erhält der Dialog die dritte Schaltfläche. Dies ist im Wesentlichen das, was die beiden wichtigsten Antworten auf diese Frage tun.
d60402
Wie unter stackoverflow.com/a/19658646/2914140 gezeigt , zeigt diese Lösung Schaltflächen an, wenn keine Dialognachricht festgelegt ist.
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
quelle
1
Was ist der Unterschied zu den Top 2 Antworten?
FindOutIslamNow