RadioGroupとRadioButtonでハマった
初投稿です。
Kotlinで仕事中に気づいたから適当にアウトプット。
前提
- RadioGroupはXMLで定義済み
- そこにコード側でRadioButtonをaddViewしていく
- けっこうよく使う形
欲しい挙動
「追加されていくRadioButtonの初期値を付けたい」
ありがち。
コード
list = listOf(1, 2, 3)// 意味のある情報
radioGroup = findById(R.id.radio_group) as RadioGroup
for (data in list){
val radioButton = RadioButton(this)
if (data == 1){
// 初期値として使いたい!
radioButton.isChecked = true
}
radioGroup.addView(radioButton)
}
見た目はいい
見た目的にはチェックがついててとても良い
checkedRadioButtonIdが正しく取れない
- ここハマリポイント
- checkedRadioButtonIdが使いたいのにそれが上手く行かない
- もしかしてaddSubViewが後だとチェックされてるかどうかが見えない…?
リファクト
list = listOf(1, 2, 3)// 意味のある情報
radioGroup = findById(R.id.radio_group) as RadioGroup
for (data in list){
val radioButton = RadioButton(this)
// 宣言直後にRadioButtonをSubViewとして登録
radioGroup.addView(radioButton)
if (data == 1){
// 初期値として使いたい!
radioButton.isChecked = true
}
}
動いた
やったぜ。
所感
- 確定というわけではないが、addSubViewしたときには中のパラメータは見ていない?
- 複数追加された時全部にcheckを付けておけば、全部チェックされたものも作れるのかな?
- 実用性は無い、どれもチェックされてないし
- addSubViewは単なるコピー配置ではなく、参照配置(?)なんだなぁと実感
- これならaddSubViewを先にしておいてViewをいじくり回したほうが安全っぽい…ぽくない?
- Kotlinで説明してるけど、多分Android Javaでも同じような挙動をしそう