对于CheckBox的OnCheckedChangeListener,有两种情况下会被触发:

(1)用户点击了一下CheckBox;

(2)代码中调用了setChecked(boolean checked)方法,而且參数checked与CheckBox原始的选中状态不一致。

有时候,须要仅仅监听(1)的事件。而忽略(2)的事件。

其实,这样的需求十分常见。比如,页面中有一个列表,列表中有多个checkBox供用户选择,同一时候页面有一个全选功能的checkBox。

(a)当用户将全选checkBox选上时。须要把列表中全部的checkBox都选上;

(b)当用户将全选checkBox取消选择时,须要把列表中全部的checkBox都选取消选择。

(c)假设当前是全选状态,仅仅要用户随意取消选择了列表中一个checkBox,则将全选button取消选择。

这时候问题就出现了:运行(c)时,须要对全选的checkBox.setChecked(false),而这会调用全选button的OnCheckedChangeListener。因为(b)的原因。列表中全部的checkBox都会被取消选择,这不是期望的结果。

为了解决问题,有两种方法:

方案(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();
}
});

问题完美解决。

最新文章

  1. php实现的分页类
  2. Linux Shell 重定向与管道【转帖】
  3. log4net 添加自定义日志到数据库
  4. Java——日期格式
  5. Maven安装与全局profile配置
  6. C. Anya and Smartphone
  7. Time complexity analysis of algorithms
  8. jQuery中get与eq的区别
  9. UVa 11401 三角形的个数
  10. 日常:css样式、选择器、个别知识点、数组array
  11. 通过新浪ip地址库获取用户省份
  12. android GifView分享
  13. Android:JNI与NDK(一)
  14. C# 定时任务
  15. php中__call() 和 __callStatic方法的使用
  16. javascript AOP(面向切面编程)
  17. 自定义简单的模板引擎-JS模板引擎
  18. crontab修改默认编辑器
  19. DIY微型操作系统(1)—— 开发的准备
  20. nginx在centos & ubuntu上的安装

热门文章

  1. cx-oracle-------------------安装
  2. 小程序canvas生成二维码图片踩的坑
  3. POJ-2318 TOYS 计算几何 判断点在线段的位置
  4. 洛谷 P2279 [HNOI2003]消防局的设立 (树形dp or 贪心)
  5. Java基础学习总结(46)——JAVA注解快速入门
  6. Lucene3.6.2包介绍,第一个Lucene案例介绍,查看索引信息的工具lukeall介绍,Luke查看的索引库内容,索引查找过程
  7. [Servlet&JSP] HttpSession会话管理
  8. oracle 存储过程定义及调试,并终于被C# 调用 代码
  9. hdoj--3183--A Magic Lamp(贪心)
  10. 数论之证明数n等于其因数的欧拉函数值之和