直接回答
由於@MikeM在評論中回答,您可以使用instanceof
爲CompoundButton
或Checkable
,並投給檢查一次。
@Override
public void onClick(View view) {
boolean checkState = false;
if (view instanceof Checkable) {
checkState = ((Checkable) view).isChecked();
}
switch (view.getId()) {
// ...
}
}
更好的答案
然而,隨着@MikeM也提到,你應該使用OnCheckedChangeListener
而不是OnClickListener
。有兩個類似的檢查改變的監聽器:
的CompoundButton
聽者可以用於一個CheckBox
或RadioButton
。但是,如果RadioGroup
中的所有單選按鈕都有此設置,則監聽器將被調用兩次,一次用於關閉按鈕,一次用於打開按鈕。因此,最好將RadioGroup
聽衆用於單選按鈕。
因此,將RadioGroup.OnCheckedChangeListener
添加到RadioGroup
和CompoundButton.OnCheckedChangeListener
到每個CheckBox
。
// 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);
// ...
當聽衆是這樣實現的:
單選按鈕
的isChecked()
值true
無論什麼RadioButton
ID是由RadioGroup
監聽返回。
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