直接回答
@MikeMはコメントで答えとして、あなたはCompoundButton
やCheckable
のために一度チェックして、それにキャストするinstanceof
を使用することができます。 @MikeMも述べたように
@Override
public void onClick(View view) {
boolean checkState = false;
if (view instanceof Checkable) {
checkState = ((Checkable) view).isChecked();
}
switch (view.getId()) {
// ...
}
}
良い答え
しかし、あなたはOnCheckedChangeListener
ではなくOnClickListener
を使用する必要があります。
CompoundButton
リスナー
が
CheckBox
または
RadioButton
のために使用することができます:2人の類似確認変更リスナーがあります。しかし、
RadioGroup
のすべてのラジオボタンがこのセットを持っていた場合、リスナーは2回呼び出されます。1回はボタンがオフになり、1回はオンになります。したがって、ラジオボタンにはリスナーを使用することをお勧めします(
RadioGroup
)。
RadioGroup.OnCheckedChangeListener
をRadioGroup
に、CompoundButton.OnCheckedChangeListener
をCheckBox
にそれぞれ追加してください。
ラジオボタン
isChecked()
値はRadioButton
idがRadioGroup
リスナーによって返されるどんなためtrue
で次のようにリスナーが実装されて
// set RadioGroup.OnCheckedChangeListener
RadioGroup rg = (RadioGroup) view.findViewById(R.id.radio_group);
rg.setOnCheckedChangeListener(radioGroupListener);
// set `CompoundButton.OnCheckedChangeListener`
CheckBox cb1 = (CheckBox) view.findViewById(R.id.check_box_1);
cb1.setOnCheckedChangeListener(checkBoxListener);
CheckBox cb2 = (CheckBox) view.findViewById(R.id.check_box_2);
cb2.setOnCheckedChangeListener(checkBoxListener);
// ...
。
RadioGroup.OnCheckedChangeListener radioGroupListener = new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {
// checkedId is the id of the newly checked radio button
switch (checkedId) {
case R.id.radio_button_1:
// ...
break;
case R.id..radio_button_2:
// ...
break;
// ...
}
}
};
チェックボックス
isChecked
値が直接CompoundButton
リスナーに渡されます。
CompoundButton.OnCheckedChangeListener checkBoxListener = new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
switch (compoundButton.getId()) {
case R.id.checkbox_1:
// ...
break;
case R.id.checkbox_2:
// ...
break;
}
}
};
+1私はラジオボタンとチェックボックスに異なるリスナーを使用する方が良いと判断しました。私の更新された答えを見てください。 – Suragch