Android Alert Dialog с одной, двумя и тремя кнопками

Я не делаю оповещения очень часто, но каждый раз, когда я делаю это, мне нужно время, чтобы прочитать документацию и понять, как это сделать. Поскольку мне пришлось делать это несколько раз сейчас, я собираюсь написать ответ ниже, к которому я смогу вернуться в будущем. В частности, я хочу сравнить основной код для

  • Одна кнопка (ОК)
  • Две кнопки (ОК и Отмена)
  • Три кнопки (положительный, отрицательный, другой)

Было бы неплохо иметь базовый код для этих трех распространенных типов оповещений в одном месте, чтобы их можно было легко найти и изменить в будущем. Этот вопрос спрашивает, как это сделать за одну кнопку.

Я добавляю свой ответ ниже.

1 ответ

Решение

Одна кнопка

import android.support.v7.app.AlertDialog;

public class MainActivity extends AppCompatActivity {

    public void showAlertDialogButtonClicked(View view) {

        // setup the alert builder
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("My title");
        builder.setMessage("This is my message.");

        // add a button
        builder.setPositiveButton("OK", null);

        // create and show the alert dialog
        AlertDialog dialog = builder.create();
        dialog.show();
    }
}

Две кнопки

public class MainActivity extends AppCompatActivity {

    public void showAlertDialogButtonClicked(View view) {

        // setup the alert builder
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("AlertDialog");
        builder.setMessage("Would you like to continue learning how to use Android alerts?");

        // add the buttons
        builder.setPositiveButton("Continue", null);
        builder.setNegativeButton("Cancel", null);

        // create and show the alert dialog
        AlertDialog dialog = builder.create();
        dialog.show();
    }
}

Три кнопки

public class MainActivity extends AppCompatActivity {

    public void showAlertDialogButtonClicked(View view) {

        // setup the alert builder
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Notice");
        builder.setMessage("Launching this missile will destroy the entire universe. Is this what you intended to do?");

        // add the buttons
        builder.setPositiveButton("Launch missile", null);
        builder.setNeutralButton("Remind me later", null);
        builder.setNegativeButton("Cancel", null);

        // create and show the alert dialog
        AlertDialog dialog = builder.create();
        dialog.show();
    }
}

Если текст кнопки слишком длинный, чтобы все умещалось по горизонтали, он будет автоматически размещен в вертикальном столбце из трех кнопок.

Обработка нажатий кнопок

OnClickListener было null в приведенных выше примерах. Вы можете заменить null с слушателем, чтобы сделать что-то, когда пользователь нажимает кнопку. Например:

builder.setPositiveButton("Launch missile", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {

        // do something like...
        launchMissile();
    }
});

Продолжается

Есть еще много вариантов диалогов, которые вы можете сделать. Смотрите документацию для помощи с этим.

Поскольку только три кнопки поддерживаются в AlertDialogВот пример диалога со списком.

public class MainActivity extends AppCompatActivity {

    public void showAlertDialogButtonClicked(View view) {

        // setup the alert builder
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Choose an animal");

        // add a list
        String[] animals = {"horse", "cow", "camel", "sheep", "goat"};
        builder.setItems(animals, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                switch (which) {
                    case 0: // horse
                    case 1: // cow
                    case 2: // camel
                    case 3: // sheep
                    case 4: // goat
                }
            }
        });

        // create and show the alert dialog
        AlertDialog dialog = builder.create();
        dialog.show();
    }
}

Посмотрите этот ответ для похожих примеров списка переключателей и списка флажков.

Заметки

  • Используйте строковые ресурсы, а не жестко закодированные строки.
  • Вы можете обернуть все в классе, который расширяет DialogFragment для легкого повторного использования диалога. (Смотрите это для помощи.)
  • В этих примерах использовалась библиотека поддержки для поддержки версий до API 11. Поэтому импорт должен быть

    import android.support.v7.app.AlertDialog;
    
  • Я опустил onCreate Метод в примерах выше для краткости. Там не было ничего особенного.

Смотрите также

Другие вопросы по тегам