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します。

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

One Comment