AlertDialogでRadioButtonのような選択肢を表示するときは、setSingleChoiceItemsをカスタマイズします。

普通に実装するとこんな感じになります。

//選択肢の初期値
checking = checked;

//ダイアログに表示する項目
final CharSequence[] items = {"アラートで通知しない", "1日前", "2日前", "3日前"};

new AlertDialog.Builder(SetAlertActivity.this)
.setTitle("通知したい日を選択してください")
.setSingleChoiceItems(items, checking, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
//アイテムを選択したらここに入る
checking = item;
}
})
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//OKを押したらここに入る
checked = checking;
}
})
.setNegativeButton("キャンセル", null)
.show();

 

 

 

 

 

 

 

 

 

 

 

 

 

 

int checking;   と   int checked;

という変数で選択したアイテムの値を管理します。どっかActivityの上の方で宣言しておいてください。

これでも良かったのですが、1行が高さがけっこうあるので、下の方の項目はスクロールさせないとみることができません。

ファーストビューで全項目を見せたいときは、行ごとのレイアウトを任意でデザインします

そうするとこう↓なります。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//選択肢の初期値
checking = checked;

//ダイアログに表示する項目
String intervals[] = {
"毎日",
"1日おき(隔日)",
"2日おき",
"3日おき",
"4日おき",
"5日おき",
"6日おき(毎週)",
"頓服薬",
};

ArrayAdapter<String> adapter = new ArrayAdapter<String>(
getApplicationContext(), R.layout.line_set_interval, intervals);

new AlertDialog.Builder(SetIntervalActivity.this)
.setTitle("服用間隔(何日ごとに服用するか)を入力してください")
.setSingleChoiceItems(adapter, checking, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
//アイテムを選択したらここに入る
checking = item;
}
})
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//OKを押したらここに入る
checked = checking;
}
})
.setNegativeButton("キャンセル", null)
.show();

setSingleChoiceItemsの1つめの引数にadapterをセットしています。

このadapter にはgetApplicationContext()(Context)、R.layout.line_set_interval(行ごとのレイアウト)、intervals(セットするアイテム)が引数に渡されています。

この中の、R.layout.line_set_intervalで、オリジナルのレイアウトを定義しているわけです。

<?xml version="1.0" encoding="utf-8"?>

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="fill_parent"
android:layout_height="40dp"
android:textSize="14sp"
android:textColor="@android:color/background_dark"
android:gravity="center_vertical"
android:paddingLeft="12dip"
android:paddingRight="12dip"

android:checkMark="?android:attr/textCheckMark"

android:text="2日おき"/>

これをレイアウトフォルダの中にline_set_interval.xmlとして保存します。

以上で独自のレイアウトでsetSingleChoiceItemsを実装できます。

Post Navigation