compoundbutton调用setChecked触发onCheckedChanged的终极解决方案;「建议收藏」
解决方案 建议 收藏 调用 终极 触发 compoundbutton
2023-06-13 09:11:16 时间
大家好,又见面了,我是你们的朋友全栈君。
当我们想要实现了一个简单的有状态切换的控件的时候,我们通常会去实现,CompoundButton来实现我们想要的一个效果,最常见的就是系统的CheckBox,但是在使用的过程中,我们会发现一个问题就是:我们在使用SetChecked的时候,总是会触发,onCheckedChanged这个回掉方法; 那么怎么样才能做到不触发这个回掉方法呢? 首先我们需要知道为什么会触发这个方法;查看源码如下:
public void setChecked(boolean checked) {
if (mChecked != checked) {
mChecked = checked;
refreshDrawableState();
// Avoid infinite recursions if setChecked() is called from a listener
if (mBroadcasting) {
return;
}
mBroadcasting = true;
if (mOnCheckedChangeListener != null) {
mOnCheckedChangeListener.onCheckedChanged(this, mChecked);
}
if (mOnCheckedChangeWidgetListener != null) {
mOnCheckedChangeWidgetListener.onCheckedChanged(this, mChecked);
}
mBroadcasting = false;
}
}
我们发现一个问题就是:只要我们设置了监听器,是会始终触发onCheckedChanged里面的回掉方法的,所以这里我们在调用SetChecked的时候不想触发OnCheckedChanged里面的方法的时候,我们在调用之前将这个监听器设置为空,掉用结束后,再次设置监听器; 具体如下:
mCheck.setOnCheckedChangeListener (null);
mCheck.setChecked (false);
mCheck.setOnCheckedChangeListener (mListener);
这样的话,就完美解决了,setChecked触发了onCheckedChanged里面的监听的方法;
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/136334.html原文链接:https://javaforall.cn
相关文章
- IDEA中Maven依赖包下载不了的问题解决方案汇总「建议收藏」
- ajax跨域解除方案,关于Ajax跨域问题及解决方案详析「建议收藏」
- jmeter发送kafka数据key错误且无法生成时间戳解决方案「建议收藏」
- 关于【ExecuteReader: Connection 属性尚未初始化】的错误提示解决方案「建议收藏」
- ORA-01017解决方案「建议收藏」
- 滴滴开源夜莺Nightingale:企业级监控解决方案「建议收藏」
- Java sessionID 一直变化的解决方案「建议收藏」
- 同步锁-线程安全问题解决方案「建议收藏」
- web3.0模式MetaForce佛萨奇2.0系统开发源码解决方案
- 极速抽取MySQL数据:一站式解决方案(mysql数据抽取)
- Oracle TP:密码解决方案及优化建议(oracletp)
- Oracle公司前沿数据库智能解决方案(oracle公司数据库)
- 问17个MySQL面试问题及其解决方案(17mysql面试提)
- 钉钉再度发力教育!推出教培解决方案,提供亿元补贴
- js循环动态绑定带参数函数遇到的问题及解决方案[转]