该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
写了一个CheckBox的全选功能 一开始可以实现点多选 全部都选上 再点一下 所有的勾全部取消
后来想添加两个功能 1、在多选状态下 取消掉一个勾 同时多选勾也取消掉 2、下面三个全选上后 全选选项自动也被勾上
但是把语句逻辑写好后 运行发现 在点全选按钮的时候 其中的(1)语句会把下方的(2):case R.id.cbSelectName:
里面的代码也同时调用 导致出现的结果很混乱 上网查的解决方案全都是js方面的 不知道有没有java方面的解决办法啊?
现附上代码
class CheckBoxListener implements OnCheckedChangeListener {
@Override
public void onCheckedChanged(CompoundButton cbName, boolean isChecked) {
switch (cbName.getId()) {
case R.id.cbSelectAll: //全选按钮的实现
cbSelectName.setChecked(isChecked); //(1)
cbSelectSex.setChecked(isChecked);
cbSelectAge.setChecked(isChecked);
break;
case R.id.cbSelectName: //(2)
if (cbSelectAll.isChecked() == true) {
cbSelectAll.setChecked(false);
cbSelectName.setChecked(false);
}
else {
if (cbSelectName.isChecked() == false
&& cbSelectSex.isChecked() == true
&& cbSelectAge.isChecked() == true) {
cbSelectAll.setChecked(true);
} else {
cbSelectName.setChecked(true);
}
}
break;
//后面的两个case基本和上面的相仿
case R.id.cbSelectSex:
if (cbSelectAll.isChecked() == true) {
cbSelectAll.setChecked(false);
cbSelectSex.setChecked(false);
} else {
if (cbSelectSex.isChecked() == false
&& cbSelectName.isChecked() == true
&& cbSelectAge.isChecked() == true) {
cbSelectAll.setChecked(true);
} else {
cbSelectSex.setChecked(true);
}
}
break;
case R.id.cbSelectAge:
if (cbSelectAll.isChecked() == true) {
cbSelectAll.setChecked(false);
cbSelectAge.setChecked(false);
} else {
if (cbSelectAge.isChecked() == false
&& cbSelectName.isChecked() == true
&& cbSelectSex.isChecked() == true) {
cbSelectAll.setChecked(true);
} else {
cbSelectAge.setChecked(true);
}
}
break;
}
}
}