Android 複数選択のチェックリストのダイアログを作る
意外と日本語情報がなかったので、書いておきます。
下記のようなダイアログを作ります。
;
public class DaySelectDialogFragment extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
mSelectedItems = new ArrayList(); // Where we track the selected
// items
boolean[] selected_days = new boolean[7];
selected_days[0] = true; //最初からチェックしておきたい項目をtrueにする
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
// Set the dialog title
builder.setTitle(R.string.day_of_week)
// Specify the list array, the items to be selected by
// default (null for none),
// and the listener through which to receive callbacks when
// items are selected
.setMultiChoiceItems(R.array.dayOfWeeklist, selected_days,
new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which,
boolean isChecked) {
if (isChecked) {
// If the user checked the item, add it
// to the selected items
mSelectedItems.add(which);
} else if (mSelectedItems.contains(which)) {
// Else, if the item is already in the
// array, remove it
mSelectedItems.remove(Integer.valueOf(which));
}
}
})
// Set the action buttons
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
// User clicked OK, so save the mSelectedItems
// results somewhere
// or return them to the component that opened the
// dialog
//mSelectedItems = [0, 1, 2]
String type = "ON";
PutUtils.putAlarmDay(context, type, mSelectedItems);
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
}
});
return builder.create();
}
}
OKをタップで
mSelectedItems
に選択した項目が、[0,1,2]という形で入ります。
んで、たとえばボタンをタップで上記のダイアログが開くようにします。
@Override
public void onClick(View v) {
Intent i;
switch (v.getId()) {
case R.id.day_of_week:
DaySelectDialogFragment day_select_dialog = new DaySelectDialogFragment();
day_select_dialog.show(m_fm_manager, TAG);
}
忘れずに、onCreateでFragmentManagerを作っておきます。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.setting_alarm);
btnAutoDay = (Button) findViewById(R.id.day_of_week);
btnAutoDay.setOnClickListener(this);
context = this;
m_fm_manager = getSupportFragmentManager();
}
下記のようなエラーが出てしまう場合は
The method getSupportFragmentManager() is undefined for the type SampleActivity
ActivityがFragmentActivityを継承しているか確認しましょう。
一番最初のDialogFragmentは、ほぼ下記のページのコピペです。
