Як можна додати третю кнопку до діалогового вікна сповіщення Android?


118

API каже, що діалогове вікно сповіщення може мати одну, дві або три кнопки, але SDK дозволяє лише позитивну та негативну кнопку. Як тоді я можу додати третю кнопку?



Корисна відповідь @Suragch для повного огляду
FindOutIslamNow

Відповіді:


136

Цей фрагмент коду повинен допомогти пояснити три різні кнопки, якими ви можете скористатися:

    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
Це застаріле ... погляньте на мою відповідь.
ninjasense

1
@ninjasense, я зрозумів і редагував, коли ви писали свою відповідь. Дякую!
sahhhm

226

Коли ви створюєте діалогове вікно, додайте подібне до будівельника:

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 Чи можна додати четверту кнопку для діалогового вікна попередження?
Geek

4
у цьому випадку - ні. Вам слід зробити спеціальний перегляд.
AndrewS

Створення спеціального діалогового оповіщення є більш виправданим. stackoverflow.com/questions/13341560 / ...
EJ Chathuranga

50

Додайте будь-яку кількість кнопок без 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
Це рішення - це не додавання кнопок, наприклад "OK", "Скасувати" тощо, а швидше встановлення елементів, які відображатимуться у списку варіантів, наприклад, "Варіант 1", "Варіант 2" тощо. У запитанні йдеться про те, що "SDK допускає лише позитивну та негативну кнопку", це не відповідає, як подолати це обмеження.
d60402

3
@ d60402 - у вас є хороший момент, але якщо розробник, який шукає спосіб створити діалогове вікно з більш ніж двома кнопками, наштовхується на цю відповідь ... Наявність цієї опції дуже корисна, оскільки вона більш гнучка з кількістю кнопок. Інакше кажучи, якщо позитивних та негативних кнопок недостатньо для того, що ви робите, 3 кнопки можуть стати 4 досить швидко. Звідси голоси.
Oded Breiner

@ d60402 Назва питання полягає в тому, як додати третю кнопку, а не як показати нейтральну кнопку.
Борис Треухов

@Boris Treukhov - Якщо у діалоговому вікні є позитивна кнопка та негативна кнопка, це означає, що у діалоговому вікні є дві кнопки. Додавання нейтральної кнопки надасть діалогу третю кнопку. Це по суті те, що роблять перші два відповіді на це питання.
d60402

Як показано в stackoverflow.com/a/19658646/2914140 , це рішення відображатиме кнопки, коли діалогове повідомлення не встановлено.
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
Яка відмінність цього у топ-2 відповідей?
FindOutIslamNow
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.