`

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

阅读更多

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

 

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

 

//在初始化CheckBox状态和设置状态变化监听事件之前,先把状态变化监听事件设置为null
holder.checkBox.setOnCheckedChangeListener(null);
//然后设置CheckBox状态
if(isChecked) {
	holder.checkbox.setChecked(true);
} else {
	holder.checkbox.setChecked(false);
}
//然后设置状态变化监听事件
holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){ 
	@Override 
	public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
		if(isChecked){ 
			//...
		}else{ 
			//....
		}
	} 
}); 
 

 

 

 

分享到:
评论
3 楼 qqyumidi123 2014-01-08  
非常感谢,问题解决了,但是不太明白为什么这么做就好了呢?
2 楼 chuxuaner 2013-07-11  
太感谢,刚好解决了这个问题
1 楼 yinpeng633 2013-04-11  
多谢,正好解决了我的问题

相关推荐

    ListView和CheckBox错位(解决)

    这个问题通常由于ListView的复用机制导致,即ListView的每个Item(ViewHolder)在滚动时会被复用,如果不正确处理,会导致CheckBox的状态与数据显示不一致。 要解决这个错位问题,我们需要理解ListView的工作原理和...

    ListView+CheckBox

    我们还添加了一个CheckedChangeListener,当CheckBox状态改变时,更新数据模型并调用`notifyDataSetChanged`来刷新ListView。 此外,为了保存用户的选中状态,特别是在ListView滚动时,我们需要在适配器中实现一种...

    android listview和checkbox联合使用选中和取消

    当ListView与CheckBox结合使用时,可以实现用户在列表中选择多个项目的功能。本文将详细介绍如何在Android应用中实现ListView与CheckBox的联合使用,包括数据绑定、事件监听以及选中状态管理。 首先,我们需要创建...

    android ListView中CheckBox使用方法

    4. 当ListView滚动时,为了提高性能,应复用convertView。这意味着在`getView()`中,即使convertView不为null,我们也需要更新它的状态,使其反映数据源中的最新值。 5. 关于描述中提到的“CheckBox优先级比...

    完美解决Listview嵌套Checkbox滑动后位置错乱问题,和checkbox的全选或全不选。

    为了提高性能,ListView在滑动时会复用已滚动出屏幕的item的视图,这可能导致Checkbox的状态在不同item之间错误地传递。为了解决这个问题,我们可以采用一个名为“ViewHolder”的设计模式。ViewHolder持有ListView项...

    ListView与CheckBox

    这就可能导致CheckBox的状态在滚动时出现问题,因为被复用的item可能保留了之前的选中状态。 解决这个问题的一个常见方法是使用`getView()`方法。在Adapter的`getView()`方法中,我们需要根据数据源的当前状态来...

    listview中的checkbox的几种处理方式

    例如,可以使用ViewHolder模式来减少findViewById的调用次数,以及在getView()中正确处理Checkbox的选中状态。同时,对于选择状态的管理,可以考虑使用 SparseBooleanArray 来存储已选择的项,以便高效地获取和操作...

    Android ListView批量删除

    在这里,我们创建一个CheckBox并将其添加到布局中,然后设置一个OnCheckedChangeListener,用于追踪CheckBox的状态变化。 ```java @Override public View getView(int position, View convertView, ViewGroup ...

    Android ListView支持批量选择

    在Android开发中,ListView是一个非常常用的组件,用于展示大量数据的列表形式。它不仅提供了基本的列表滚动功能,还能通过自定义适配器展现各种复杂布局。本篇将重点讲解如何利用CheckBox在ListView中实现批量选择...

    android checkbox 的isChecked属性

    在Android开发中,CheckBox是用户界面(UI)中常见的组件之一,它允许用户进行二选一的操作,例如勾选或不勾选。`isChecked`属性是CheckBox类中的一个关键属性,用于判断该复选框当前是否被选中。这篇详细说明将深入...

    Android CheckBox与监听Demo源码.rar

    当CheckBox的状态改变时,该方法会被调用,`isChecked`参数表示当前CheckBox是否被选中。 此外,还可以通过调用CheckBox的`setChecked()`方法来改变其状态,例如: ```java checkBox.setChecked(true); // 设置为...

    android ListView子控件监听

    当子项中包含可选的复选框(CheckBox)或切换按钮(Switch)时,可以使用CompoundButton的CheckedChangeListener来监听它们的状态变化: ```java CheckBox checkBox = viewHolder.checkBox; checkBox....

    Android CheckBox

    `OnCheckedChangeListener`是专为CheckBox设计的接口,提供`onCheckedChanged`方法,当CheckBox状态改变时会被调用。 ```java myCheckbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener...

    Android:CheckBox的初步学习

    在上述代码中,我们通过`setOnCheckedChangeListener`方法设置了一个监听器,当CheckBox的选中状态改变时,会触发`onCheckedChanged`方法。`isChecked`参数表示当前CheckBox是否被选中,我们利用这个信息更新界面...

    checkbox混乱的解决

    当ListView滚动时,为了优化性能,Android系统会重用已滑出屏幕的列表项视图(ViewHolder),这种机制称为View的复用。然而,如果不正确处理,这可能导致复选框的状态错误地显示在其他列表项上。例如,用户在第1个...

    Android应用源码之ListViewAndCheckBox.zip

    这通常通过实现 CompoundButton.OnCheckedChangeListener 接口并在复选框状态改变时调用 onCheckedChanged() 方法来实现。同时,为了保持状态,开发者可能会使用 SparseBooleanArray 或其他数据结构来存储每个列表项...

    listview中的单选按钮多选按钮

    上述代码中,每次getView()被调用时,都会根据当前position更新RadioButton或CheckBox的状态,这样可以避免因ListView项复用导致的显示错误。同时,对于多选,我们需要在数据源中存储选中状态,以便在ListView滚动...

    Recyclerview+checkbox

    当`CheckBox`状态改变时,更新对应数据项的选择状态,并通知适配器数据已更新。 5. **选择状态管理** 为了在整个列表中保持选择状态的一致性,你需要维护一个数据结构(如List或Map)来存储每个数据项的选中状态。...

    Android仿今日头条tablayout仿QQ分组、微信通讯录分组功能实现+checkbox选择分组中成员功能

    本教程将详细介绍如何利用Android的TabLayout、Fragment、ViewPager以及ExpandableListView组件来实现这样的功能,并结合CheckBox实现用户选择分组内成员的效果。 首先,让我们了解一下这些关键组件的作用: 1. **...

    应用源码之(CheckBox与监听).zip

    开发者可以实现该接口的`onCheckedChanged()`方法,当CheckBox的选中状态发生变化时,系统会自动调用这个方法。有两种方式添加监听器:匿名内部类和自定义监听器类。以下是两种方式的示例: **匿名内部类方式:** ...

Global site tag (gtag.js) - Google Analytics