Jak mogę dodać trzeci przycisk do okna dialogowego alertów Androida?

Odpowiedzi:

136

Ten fragment kodu powinien pomóc w wyjaśnieniu trzech różnych przycisków, których możesz użyć:

    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
źródło
29
To przestarzałe ... spójrz na moją odpowiedź.
ninjasense,
1
@ninjasense, zdałem sobie sprawę i redagowałem, gdy pisałeś swoją odpowiedź. Dzięki!
sahhhm
226

Podczas tworzenia okna dialogowego dodaj do konstruktora coś takiego:

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
źródło
2
@ninjasense Czy można dodać czwarty przycisk do ostrzeżenia?
Geek
4
w tym przypadku - nie. Powinieneś stworzyć własny widok.
AndrewS
Tworzenie niestandardowego okna ostrzegawczego jest dokładniejsze. stackoverflow.com/questions/13341560/…
EJ Chathuranga
50

Dodaj dowolną liczbę przycisków bez 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
źródło
3
To rozwiązanie nie polega na dodawaniu przycisków, np. „OK”, „Anuluj”, itp., Ale raczej na ustawieniu elementów, które mają być wyświetlane na liście wyborów, np. „Opcja 1”, „Opcja 2” itp. pytanie mówi, że „SDK pozwala tylko na przycisk pozytywny i negatywny”, to nie odpowiada, jak przezwyciężyć to ograniczenie.
d60402
3
@ d60402 - masz rację, ale jeśli programista szukający sposobu na utworzenie okna dialogowego z więcej niż 2 przyciskami napotka tę odpowiedź ... Posiadanie tej opcji jest bardzo przydatne, ponieważ jest bardziej elastyczne w przypadku liczby przycisków. Mówiąc inaczej, jeśli przyciski dodatnie i ujemne nie wystarczą do tego, co robisz, 3 przyciski mogą szybko zmienić się w 4. Stąd głosy.
Oded Breiner
@ d60402 Tytuł pytania brzmi: jak dodać trzeci przycisk, a nie jak pokazać przycisk neutralny.
Boris Treukhov
@Boris Treukhov - Jeśli okno dialogowe ma przycisk dodatni i przycisk ujemny, oznacza to, że okno dialogowe ma dwa przyciski. Dodanie neutralnego przycisku dałoby dialogowi trzeci przycisk. Zasadniczo to właśnie robią dwie najważniejsze odpowiedzi na to pytanie.
d60402
Jak pokazano na stackoverflow.com/a/19658646/2914140 , to rozwiązanie wyświetli przyciski, gdy nie ma ustawionego komunikatu dialogowego.
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
źródło
1
Jaka jest różnica między tymi dwoma odpowiedziami?
FindOutIslamNow