RadioGroupで初期選択のラジオボタンを指定する

やりたい事

ラジオグループを用意した時に、そのままでは、どのラジオボタンも選択されていない状態になっています。

デフォルトで選択されている状態にしたい、というのがやりたい事です。


方法

RadioGroupクラスの「void check (int id)」を使えば良いようでした。

サンプルコード(Android:Kotlin)

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.*
import android.widget.LinearLayout.*

class MainActivity : AppCompatActivity() {

   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)

       // レイアウトの生成
       val radioBtn1 = RadioButton(this) // ラジオボタン1を用意
       val radioBtn2 = RadioButton(this) // ラジオボタン2を用意
       val radioGroup = RadioGroup(this) // ラジオグループを用意
       LinearLayout(this).apply {
           orientation = VERTICAL
       }.let{
           setContentView(it)

           // ラジオグループの生成
           it.addView( radioGroup.apply{
               orientation = HORIZONTAL
               // ラジオボタンを登録
               addView( radioBtn1.apply{ text = "ラジオボタン1"})
               addView( radioBtn2.apply{ text = "ラジオボタン2"})
           })
       }

       // 初期設定(デフォルトでラジオボタン2を選択状態にする)
       radioGroup.check(radioBtn2.id)

       // ラジオボタンのチェックが変更された時にテキストを表示
       radioGroup.setOnCheckedChangeListener { _, checkedId ->
           Toast.makeText( this, findViewById<RadioButton>(checkedId).text.toString(), Toast.LENGTH_LONG).show()
       }
   }
}

サンプルコードでは、ラジオグループ内にあるボタンの中から、デフォルトで「ラジオボタン2」が選択された状態になるよう設定しています:
 radioGroup.check(radioBtn2.id)

ちなみに、デフォルトで選択状態にしたいラジオボタンをラジオグループにAddViewした後(⇦ 動的にラジオボタンを作った場合の注意点)であれば
 radioBtn2.isChecked = true
と、当該ラジオボタンの方で設定しても選択できるみたいでした。

参考

リファレンス:RadioGroup:check(int)Android Developers Docs

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

この記事が気に入ったらサポートをしてみませんか?