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?



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

        //...

    }});

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

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

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

1
Was ist der Unterschied zu den Top 2 Antworten?
FindOutIslamNow
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.