Pages

2011年9月10日土曜日

AlertDialogでsetMessage()とsetSingleChoiceItems()が同時に使えない

AndroidのAlertDialogでちょっとハマった。

ダイアログにラジオボタンを表示させようと思って、こんなコードを書いてみました。
@Override
protected Dialog onCreateDialog(int id){
  if(id == DLG_ID_SINGLE_CHOICE){
    return new AlertDialog.Builder(MenuActivity.this)
      .setTitle(R.string.dialog_title)
      .setMessage(R.string.dialog_msg)
      .setSingleChoiceItems(R.array.dialog_choices, 0, null)
      .setPositiveButton(android.R.string.ok, null)
      .setNegativeButton(android.R.string.cancel, null)
      .create();
  }
  return null;
}
で、結果がこれ。


あれ?表示されてないやん!おかしいな。

AndroidSDKのサンプルのApiDemosを動かしてみると、ちゃんと表示されてる。
ソースを見て、どこが違うのか比べてみたらSetMessage()がない。
じゃあ一回、取ってみるか。

@Override
protected Dialog onCreateDialog(int id){
  if(id == DLG_ID_SINGLE_CHOICE){
    return new AlertDialog.Builder(MenuActivity.this)
      .setTitle(R.string.dialog_title)
      .setSingleChoiceItems(R.array.dialog_choices, 0, null)
      .setPositiveButton(android.R.string.ok, null)
      .setNegativeButton(android.R.string.cancel, null)
      .create();
  }
  return null;
}




表示された。
一緒に使えないってことか?

推測するに、Androidのダイアログはタイトル、コンテンツ、ボタンの三つの領域があって、
コンテンツ領域には一つのViewしか表示できないんではないかと思います。
試してませんが、setMultiChoiceItems()setItems()なんかも一緒に使えないんでしょう。
SetView()ってメソッドがあるんで、凝ったことをしたかったらコレを使えってことでしょうね。


0 コメント:

コメントを投稿