ListVIew复用导致数据错乱
来源:互联网 发布:linux绑定域名命令 编辑:程序博客网 时间:2024/04/28 22:21
List View的复用相信大家都了解,使用convertView和ViewHolder,复用之后会大大提升性能,但在复用的同时可能会导致数据也被复用,一个典型的情况就是:在一个item上有一个checkBox,当你点击了item1上的checkBox,由于下面的某个item复用了这个item,所以导致这个item的checkBox也被勾选了,这就是典型的复用导致的数据错乱。
解决方法:
1.在使用convertView之前对这个convertView上面的状态进行清除,然后再根据业务逻辑进行对应的赋值。
2.将每个item与一个对象进行绑定,这个对象记录了这个item的状态。例如:
记录每个item状态信息的bean对象:
public class TagItemInfo { private String tagContent;//tag内容 private Boolean isSelected;//是否选中 public String getTagContent() { return tagContent; } public void setTagContent(String tagContent) { this.tagContent = tagContent; } public Boolean getSelected() { return isSelected; } public void setSelected(Boolean selected) { isSelected = selected; } @Override public String toString() { return "TagItemInfo{" + "tagContent='" + tagContent + '\'' + ", isSelected=" + isSelected + '}'; }}
2.getView:
@Override public View getView(final int position, View convertView, ViewGroup parent) { // View view = null; mCheckedTags = new ArrayList<>(); final ViewHolder viewHolder ; final TagItemInfo tagItemInfo = (TagItemInfo) getItem(position); if (convertView == null) { viewHolder = new ViewHolder(); convertView = View.inflate(mContext, R.layout.tag_list_item, null); viewHolder.tagContent = (TextView) convertView.findViewById(R.id.tv_tag); viewHolder.tagCB = (CheckBox) convertView.findViewById(R.id.cb_tag); viewHolder.tagCB.setTag(tagItemInfo); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); viewHolder.tagCB.setTag(tagItemInfo);//两个都是setTag } viewHolder.tagContent.setText(tagItemInfo.getTagContent()); viewHolder.tagCB.setChecked(tagItemInfo.getSelected()); //单选框的点击事件 viewHolder.tagCB.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { TagItemInfo info = (TagItemInfo) viewHolder.tagCB.getTag(); info.setSelected(buttonView.isChecked()); } });
这样就完美的解决了复用导致的数据错乱问题。。。。。
参考文章:http://blog.csdn.net/huanongjingchao/article/details/42918869
0 0
- ListView复用机制导致数据错乱
- ListVIew复用导致数据错乱
- ListView复用导致CheckBox状态错乱
- listView和checkBox因为listView的复用导致错乱
- listview复用导致内容错乱的问题
- ListView复用导致图片错乱及闪烁问题
- ListView复用导致checkBox错乱的解决方法
- Android中ListView复用导致布局错乱的解决方案
- listview,gridview 邪恶的wrap_content高度属性导致数据错乱
- Checkbox复用导致错乱
- listview滑动数据错乱
- ListView数据错乱
- Android RecyclerView中ViewHolder的复用导致数据错乱解决办法
- ListView的Intent跳转详情页, 滑动与点击Position错乱导致数据混乱问题解决
- ListView中开启线程查询更新数据导致的ViewHolder错乱问题解决
- Android ListView数据错乱问题解决
- 解决ListView滚动复用convertview和ViewHolder数据填充错乱
- 77ListView中item带有CheckBox复用缓存的问题(重点)(数据错乱)
- vc中删除文件夹以及文件夹中的内容的三种方法
- 等价二叉树
- [三星移动硬盘] 磁盘必须经过格式化(无法显示)
- AFNetworking报错:(415 Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: un
- 138
- ListVIew复用导致数据错乱
- 关于“.bash_profile”和“.bashrc”区别的总结
- 模板文件不存在,无法解析文档!的终极解决方案
- 从原理上分析解决软键盘的遮挡与隐藏问题, EditText在Toolbar中键盘弹出问题
- 第一类Stirling数和第二类Stirling
- MVC设计模式理解
- Redis解析之集群(一)
- HashMap 和HashTable的区别
- Oracle 11g 导出空表、少表解决办法