コピペしてすぐ使えるアラートダイアログ集

  • 325
    いいね
  • 5
    コメント
この記事は最終更新日から1年以上が経過しています。

注意事項(2016/7/14追記)

画面回転時のメモリーリークを防ぐため、下記のような DialogFragment を作成することを推奨します。

public class SampleDialogFragment extends DialogFragment {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        return new AlertDialog.Builder(getActivity())
                .setTitle("タイトル")
                .setMessage("メッセージ")
                .create();
    }

    @Override
    public void onPause() {
        super.onPause();

        // onPause でダイアログを閉じる場合
        dismiss();
    }
}

はじめに

あのタイプのダイアログってどう出すんだっけ、とよく忘れてしまうので、コピペしてすぐ使えるようにメモ。サンプルは Fragment 内で実行するケースのものであり、Negative ボタンはキャンセルボタンとして扱っています。

公式サイトの参考ページはこちら。
http://developer.android.com/guide/topics/ui/dialogs.html
http://developer.android.com/reference/android/app/AlertDialog.Builder.html

タイトル、メッセージ、OK

1.png

new AlertDialog.Builder(getActivity())
        .setTitle("title")
        .setMessage("message")
        .setPositiveButton("OK", null)
        .show();

タイトル、メッセージ、OK/Cancel

2.png

new AlertDialog.Builder(getActivity())
        .setTitle("title")
        .setMessage("message")
        .setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // OK button pressed
            }
        })
        .setNegativeButton("Cancel", null)
        .show();

タイトル、メッセージ、YES/Later/NO

評価メッセージとかでよくみるやつですね。

3.png

new AlertDialog.Builder(getActivity())
        .setTitle("title")
        .setMessage("message")
        .setPositiveButton("YES", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // YES button pressed
            }
        })
        .setNeutralButton("Later", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // Later button pressed
            }
        })
        .setNegativeButton("No", null)
        .show();

A/B/C からひとつ選択する

4.png

final String[] items = {"item_0", "item_1", "item_2"};
new AlertDialog.Builder(getActivity())
        .setTitle("Selector")
        .setItems(items, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // item_which pressed
            }
        })
        .show();

A/B/C から1つ選択する(確認ボタンつき)

5.png

内容に誤りがありましたので訂正しました。

final String[] items = {"item_0", "item_1", "item_2"};
int defaultItem = 0; // デフォルトでチェックされているアイテム
final List<Integer> checkedItems = new ArrayList<>();
checkedItems.add(defaultItem);
new AlertDialog.Builder(getActivity())
        .setTitle("Selector")
        .setSingleChoiceItems(items, defaultItem, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                checkedItems.clear();
                checkedItems.add(which);
            }
        })
        .setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                if (!checkedItems.isEmpty()) {
                    Log.d("checkedItem:", "" + checkedItems.get(0));
                }
            }
        })
        .setNegativeButton("Cancel", null)
        .show();

複数選択

6.png

final String[] items = {"item_0", "item_1", "item_2"};
final ArrayList<Integer> checkedItems = new ArrayList<Integer>();
new AlertDialog.Builder(getActivity())
        .setTitle("Selector")
        .setMultiChoiceItems(items, null, new DialogInterface.OnMultiChoiceClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                if (isChecked) checkedItems.add(which);
                else checkedItems.remove((Integer) which);
            }
        })
        .setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                for (Integer i : checkedItems) {
                    // item_i checked
                }
            }
        })
        .setNegativeButton("Cancel", null)
        .show();

カスタムレイアウト

7.png

View view = getActivity().getLayoutInflater().inflate(R.layout.custom_layout, null);
new AlertDialog.Builder(getActivity())
        .setView(view)
        .show();

その他よく使いそうなメソッド

AlertDialog.Builder#setIcon

タイトルに使われるアイコンをセットする

AlertDialog.Builder#setCancelable

ダイアログをキャンセルできるかどうかを指定する