为了解决这个问题,有两种方法:个人认为第二种方案明显优于第一种方案
方案(1):
程序中定义一个全局变量boolean ignoreChange,然后,调用setChecked方法时改变ignoreChange的值:
ignoreChange = true; selectAllCB.setChecked(true); ignoreChange = false;
然后在selectAllCB的OnCheckedChangeListener中对ignoreChange进行判断:
selectAllCB.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Overridepublicvoid onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (!ignoreChange) { //do something } } });
方案(2):
对于checkBox不注册OnCheckedChangeListener,而直接注册OnClickListener,
checkBox.setOnClickListener(new View.OnClickListener() { @Override publicvoid onClick(View v) { boolean checked = ((CheckBox) v).isChecked(); Toast.makeText(CheckBoxTest.this, "isChecked?" + checked, Toast.LENGTH_SHORT).show(); } });