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