CheckBox:屏蔽setChecked方法对OnCheckedChangeListener的影响
2024-10-01 14:24:45
对于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();
}
});
问题完美解决。
最新文章
- php实现的分页类
- Linux Shell 重定向与管道【转帖】
- log4net 添加自定义日志到数据库
- Java——日期格式
- Maven安装与全局profile配置
- C. Anya and Smartphone
- Time complexity analysis of algorithms
- jQuery中get与eq的区别
- UVa 11401 三角形的个数
- 日常:css样式、选择器、个别知识点、数组array
- 通过新浪ip地址库获取用户省份
- android GifView分享
- Android:JNI与NDK(一)
- C# 定时任务
- php中__call() 和 __callStatic方法的使用
- javascript AOP(面向切面编程)
- 自定义简单的模板引擎-JS模板引擎
- crontab修改默认编辑器
- DIY微型操作系统(1)—— 开发的准备
- nginx在centos &; ubuntu上的安装
热门文章
- cx-oracle-------------------安装
- 小程序canvas生成二维码图片踩的坑
- POJ-2318 TOYS 计算几何 判断点在线段的位置
- 洛谷 P2279 [HNOI2003]消防局的设立 (树形dp or 贪心)
- Java基础学习总结(46)——JAVA注解快速入门
- Lucene3.6.2包介绍,第一个Lucene案例介绍,查看索引信息的工具lukeall介绍,Luke查看的索引库内容,索引查找过程
- [Servlet&;amp;JSP] HttpSession会话管理
- oracle 存储过程定义及调试,并终于被C# 调用 代码
- hdoj--3183--A Magic Lamp(贪心)
- 数论之证明数n等于其因数的欧拉函数值之和