Edited at

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

More than 3 years have passed since last update.


注意事項(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


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