RadioButtonで複数の選択肢から1つだけ選択する
|Androidには複数の選択肢から1つだけ選択するためのRadioButtonクラスがあります。
CheckBoxクラスと似たようなUI部品ですが、CheckBoxクラスの異なる点は、今回のタイトルにもあるように一つだけ選択できることです。
サンプルコードはこちらになります。
それでは続きでサンプルコードと共に説明していきます。
RadioGroupクラス/RadioButtonクラス
複数のRadioButtonクラスをグループ化するのがRadioGroupクラスです。
一つのRadioGroupに登録されているRadioButtonクラスは、どれか一つしか選択できません。
例えば、ボタン1~4までの4つのボタンが同じ一つのRadioGroupに登録されている場合に、1が選択されていて、その次に3を選択すると1の選択は解除されます。
今回はレイアウトのxmlファイルに1つのRadioGroupに4つのRadioButtonを登録します。
もしソースコードから行う場合はRadioGroupのオブジェクトにRadioButtonをaddViewします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | < RadioGroup android:layout_height = "wrap_content" android:layout_width = "wrap_content" android:id = "@+id/RadioGroup" > < RadioButton android:text = "1番目" android:id = "@+id/RadioButton01" android:layout_height = "wrap_content" android:layout_width = "wrap_content" > </ RadioButton > < RadioButton android:text = "2番目" android:id = "@+id/RadioButton02" android:layout_width = "wrap_content" android:layout_height = "wrap_content" > </ RadioButton > < RadioButton android:text = "3番目" android:id = "@+id/RadioButton03" android:layout_width = "wrap_content" android:layout_height = "wrap_content" > </ RadioButton > < RadioButton android:text = "4番目" android:id = "@+id/RadioButton04" android:layout_width = "wrap_content" android:layout_height = "wrap_content" > </ RadioButton > </ RadioGroup > |
選択されているボタンが変わった時に通知を受けとる
何が選択されているかはRadioGroupクラスのgetCheckedRadioButtonIdメソッドの戻り値でIDを知ることができます。何も選択されていない時は-1が返ってきます。
また、選択されたボタンが変わっときに通知を受け取ることも可能です。RadioGroupにOnCheckedChangeListenerを登録します。IDで変わったボタンが分かります。
getCheckedRadioButtonIdメソッドと同様にクリア(メソッドは後述)されて何も選択されていない場合はIDに-1が渡ってきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | radioGroup_ = (RadioGroup)findViewById(R.id.RadioGroup); radioGroup_.setOnCheckedChangeListener( new OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int id) { if (- 1 == id) { Toast.makeText(MainActivity. this , "クリアされました" , Toast.LENGTH_SHORT).show(); } else { Log.d( "MainActivity" , "" ); Toast.makeText(MainActivity. this , ((RadioButton)findViewById(id)).getText() + "が選択されました" , Toast.LENGTH_SHORT).show(); } } }); |
選択を解除する/任意のボタンを選択する
場合によっては選択状態を直接変更したいこともあると思います。その場合は、RadioGroupのcheckメソッドで任意のボタンを選択可能です。
また、clearCheckメソッドで選択を解除することが可能です。