android 当ListView滚动时自动调用 onCheckedChanged 导致CheckBox 状态不停变化 的解决办法

今天在做一个含有CheckBox 的ListView时,发现当初始化CheckBox的状态后, 滚动ListView,其中CheckBox 的选中状态不停的发生变化。最后发现原因是 ListView滚动时自动调用 onCheckedChanged 导致的。在查看了各种博客的解决办法后,国外的网站上有一个办法解决了我的问题。写下来分享一下。

在自定义Adapter的getView方法中这样写就行了。

Java代码  

  1. //在初始化CheckBox状态和设置状态变化监听事件之前,先把状态变化监听事件设置为null
  2. holder.checkBox.setOnCheckedChangeListener(null);
  3. //然后设置CheckBox状态
  4. if(isChecked) {
  5. holder.checkbox.setChecked(true);
  6. } else {
  7. holder.checkbox.setChecked(false);
  8. }
  9. //然后设置状态变化监听事件
  10. holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
  11. @Override
  12. public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
  13. if(isChecked){
  14. //...
  15. }else{
  16. //....
  17. }
  18. }
  19. });
时间: 2024-12-29 16:28:31

android 当ListView滚动时自动调用 onCheckedChanged 导致CheckBox 状态不停变化 的解决办法的相关文章

android 当ListView滚动时自动调用 onCheckedChanged

今天在做一个含有CheckBox 的ListView时,发现当初始化CheckBox的状态后, 滚动ListView,其中CheckBox 的选中状态不停的发生变化.最后发现原因是 ListView滚动时自动调用 onCheckedChanged 导致的.在查看了各种博客的解决办法后,国外的网站上有一个办法解决了我的问题.写下来分享一下. 在自定义Adapter的getView方法中这样写就行了. //在初始化CheckBox状态和设置状态变化监听事件之前,先把状态变化监听事件设置为null h

spring boot继承web和mybatis时,调用接口删除记录出现的空指针以及解决办法

前两天在学spring boot的时候,出现了一个很奇怪的错误,因为是第一次使用spring boot,所以没想到会遇到这种莫名其妙的bug,即调用接口删除数据库中一条记录的时候,数据库中记录事实上以及被删除了,但是却返回一个null,这就令我百思不得其解了,理论上,删除的话,会返回受影响的记录的条数. 最后排查了一圈,结果却十分令我大跌眼镜,真的很简单!下面写的代码: controller类,这里由于后来数据库sql改了,为了测试like的搜索功能,所以前面的index方法参数并未进行及时修改

android 从源码分析为什么Listview初次显示时没滚动却自动调用onScroll方法的原因

我们做Listview的分批加载时,需要为Listview调用setOnScrollListener(具体代码可见我上一篇博客) 可是,我们会发现,当运行程序时,listview明明没有滚动,那为什么系统会调用onScroll方法呢?(补充:此时onScrollStateChanged并不会调用) 我们先看setOnScrollListener源码: public void setOnScrollListener(OnScrollListener l) { mOnScrollListener =

android 检测ListView滚动到的位置

ListView滚动 1.要用到一个监听事件是:setOnScrollListener(); API解释是: Set the listener that will receive notifications every time the list scrolls. Parameters:l the scroll listener 2.它里面包含了两个方法: 一个是:onScrollStateChanged(AbsListView view, int scrollState),用来表明ListVi

Object之魔术函数__toString() 直接输出对象引用时自动调用

__toString()是快速获取对象的字符串信息的便捷方式 在直接输出对象引用时自动调用的方法. __toString()的作用 当我们调试程序时,需要知道是否得出正确的数据.比如打印一个对象时,看看这个对象都有哪些属性,其值是什么,如果类定义了toString方法,就能在测试时,echo打印对象体,对象就会自动调用它所属类定义的toString方法,格式化输出这个对象所包含的数据. 下面我们来看一个__toString()的实例 <?php class Person{ private $na

Android中ListView选中时的黄色底色

Android的ListView中默认选中时底色为黄色,如何去掉呢 其中会用到一个属性: android:listSelector="#00000000" 这样就行了 Android中ListView选中时的黄色底色

[Android学习笔记]ListView中含有Button导致无法响应onItemClick回调的解决办法

转自:http://www.cnblogs.com/eyu8874521/archive/2012/10/17/2727882.html 问题描述: 当ListView的Item中的控件只是一些展示类控件时(比如TextView),注册ListView的监听setOnItemClickListener之后,当点击Item时候会触发onItemClick回调. 但是,当Item中存在Button(继承于Button)的控件时,onItemClick回调不会被触发. 解决方案: 在Item的布局文件

vs2008调用opencv2.4.9的imread()函数失败解决办法

这两天在看opencv的C++接口函数,刚开始就出现问题: 一个简单的显示图像的程序,就是运行不成功: #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <string> using std::string; using namespace cv; int main() { string str="E:\\test\\LENA.BMP";

Windows无法自动将IP协议堆栈绑定到网络适配器 的解决办法

实验室的台式机在升级驱动后上不了网了,有线网卡驱动卸载后重装了,还是不行,通过Windows诊断发现"Windows 无法自动将 IP 协议堆栈绑定到网络适配器的解决办法". 解决办法: 打开"控制面板">>"网络和 Internet">>"网络连接",右键点击要查看的网络,选择"属性", 取消勾选"Network LightWeight Filter",点击&q