i++

プログラム系のメモ書きなど

Android : ListView (ArrayAdapter) で使う View に RadioGroup.setOnCheckedChangeListener を使うと起こる問題について

原因や問題が起きる条件が全く解明できていないものの、ひとまずメモ。

  • ListView で表示する項目の View に RadioGroup を含める
  • その RadioGroup に setOnCheckedChangeListener を設定し、その中でデータ(getItem(position) で得られるもの)を変更する

としていたところ、ListView をスクロールすると変更内容が失われて、RadioGroup の設定状態が元に戻ってしまっていました(というよりも、変なタイミングで RadioGroup.setOnCheckedChangeListener に設定したリスナーが呼ばれて変更内容が巻き戻ってしまっていた感じかもしれません)。ちなみに RadioButton の setOnCheckedChangeListener でも同じ症状が見られました。

ひとまず解決策として、各 RadioButton の setOnClickListner でデータの変更を行うことに。これなら、クリック時のみにデータの変更が行われるのでスクロール時に勝手に呼ばれてデータが書き換わることはありません。

また、RadioButton の OnClickListener はチェック状態が変わった後(RadioButton の OnCheckedChangeListener に設定したリスナーが呼ばれた後)に呼ばれるので、CompoundButton にキャストして isChecked ですれば変更後(=現在)の状態が取得できます。