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します。
<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が渡ってきます。
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メソッドで選択を解除することが可能です。