LoginSignup
0
0

More than 5 years have passed since last update.

RadioButtonの追加と初期チェックをコードで同時に行ったときに気付いた挙動

Last updated at Posted at 2017-07-26

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でも同じような挙動をしそう
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0