Как добавить третью кнопку в диалоговое окно предупреждений Android?

118

API говорит, что диалоговое окно предупреждений может иметь одну, две или три кнопки, но SDK допускает только положительную и отрицательную кнопку. Как тогда я могу добавить третью кнопку?

Ашок Кумар
источник
@Suragch полезный ответ для полного обзора
FindOutIslamNow

Ответы:

137

Этот фрагмент кода должен помочь объяснить три разные кнопки, которые вы можете использовать:

    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
источник
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();
ninjasense
источник
2
@ninjasense Можно ли добавить 4-ю кнопку в диалоговое окно предупреждения?
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
Это решение не добавляет кнопки, например, «ОК», «Отмена» и т. Д., А скорее устанавливает элементы, которые будут отображаться в списке вариантов, например «Вариант 1», «Вариант 2» и т. Д. вопрос упоминает, что «SDK допускает только положительную и отрицательную кнопку», но не отвечает, как преодолеть это ограничение.
d60402
3
@ d60402 - у вас есть хорошая мысль, но если разработчик, ищущий способ создать диалог с более чем двумя кнопками, встречает этот ответ ... Наличие этой опции очень полезно, потому что она более гибкая с количеством кнопок. Другими словами, если положительных и отрицательных кнопок недостаточно для того, что вы делаете, 3 кнопки могут быстро превратиться в 4. Отсюда и голоса.
Одед Брейнер
@ 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
В чем разница между двумя верхними ответами?
FindOutIslamNow