原文网址:http://blog.csdn.net/lemon_tree12138/article/details/39337867

ListView在什么样的情况下会出现错位?错位的原因是什么?怎么解决?下面的内容会对这些问题做一个讲解。

1.ListView在什么样的情况下会出现错位?

其实错位是当我们的ListView的每个单项(item)从屏幕中移入或是移出,我们的系统会对这个item的状态进行重新定义——是否被选中等等。一般只是显示的情况下,我们的ListView很少出现错位,因为状态没有改变。

我们现在就是拿一个CheckBox组件来说明,因为CheckBox是一个比较基础的换件,而且CheckBox的状态改变比较明显。

例如下面这种情况:

初始界面中选中第0个和第1个:

当我们对屏幕进行滑动再回来的时候,我们会看到,第0个的CheckBox的勾不见了。第9个的CheckBox出现了勾,这是个就是错位。

也就是说我们在重新加载由屏幕之外的item移到屏幕之内时,CheckBox的状态发生改变。

如是,我们想是不是有一种方法来记录这种变化,且变化只是在监听器监听到有需要改变的状态发生时,才会变化。

这里我们用一个ArrayList<Boolean>的数组来记录。

关键代码如下:

  1. public View getView(final int position, View convertView, ViewGroup parent) {
  2. ViewHolder viewHolder = null;
  3. if (recordMap.get(position) == null) {
  4. convertView = mInflater.inflate(R.layout.listview_item, null);
  5. viewHolder = new ViewHolder(convertView);
  6. Log.i(TAG, "1: " + position);
  7. final int finalP = position;
  8. recordMap.put(position, convertView);
  9. viewHolder.checkBox.setOnClickListener(new OnClickListener() {
  10. @Override
  11. public void onClick(View v) {
  12. CheckBox checkBox = (CheckBox)v;
  13. isChecked.set(finalP, checkBox.isChecked());
  14. }
  15. });
  16. convertView.setTag(viewHolder);
  17. } else {
  18. Log.i(TAG, "2: " + position);
  19. convertView = recordMap.get(position);
  20. viewHolder = (ViewHolder) convertView.getTag();
  21. }
  22. viewHolder.button.setText("click " + position);
  23. viewHolder.checkBox.setChecked(isChecked.get(position));
  24. return convertView;
  25. }

----------------------------------------------- 程序源码下载

【转】Android:ListView常见错位之CheckBox错位的更多相关文章

  1. android listview 加载图片错乱(错位)

       写道 今天晚上一个朋友介绍我看了一篇文章,也是解决android中listview在加载图片错位的问题,看了之后,感觉写的很好,自己也遇到这个问题,但是又不知道从何下手,看到这篇文章后,我的问题 ...

  2. android listview里包含组件(checkbox)点击事件和Item的点击事件冲突

    在listview的item中包含有textview和checkBox.我们既想获取listitem的点击事件,又想获取listitem中textview的点击事件和listitem中checkBox ...

  3. Android ListView常见配置说明

    ListView是我们经常使用的控件,但是使用中却因为各种原因无法设置出我们需要的效果,现将常用的设置记录下来方便以后查询. 1.拖动时背景变黑 android:cacheColorHint=&quo ...

  4. android ListView中CheckBox错位的解决

    貌似已经非常晚了,可是还是想记下笔记,想让今天完满. 在ListView中加了checkBox,但是发现点击改变其选中状态的时候,发现其位置错乱.状态改变的并非你选中的,百思不得其解.后面通过上网查资 ...

  5. Android中ListView异步加载图片错位、重复、闪烁问题分析及解决方案

    我们在使用ListView异步加载图片的时候,在快速滑动或者网络不好的情况下,会出现图片错位.重复.闪烁等问题,其实这些问题总结起来就是一个问题,我们需要对这些问题进行ListView的优化. 比如L ...

  6. Android ListView getView()方法重复调用导致position错位

    问题现状:Android ListView getView()方法重复调用导致position错位 解决办法:把ListView布局文件的layout_height属性改为fill_parent或者m ...

  7. android listview 使用checkbox问题

    在android中使用listview时需要了解listview加载数据的原理,为了避免listview由于列表项过多每次需要进行new造成性能低下的问题,android中的listview使用了控件 ...

  8. [置顶] android ListView包含Checkbox滑动时状态改变

    题外话: 在xamarin android的开发中基本上所有人都会遇到这个小小的坎,的确有点麻烦,当时我也折腾了好一半天,如果你能看到这篇博客,说明你和我当初也是一样的焦灼,如果你想解决掉这个小小的坎 ...

  9. Android ListView CheckBox状态错乱(转)

    转自:http://www.cnblogs.com/wujd/archive/2012/08/17/2635309.html listView中包含checkBox的时候,经常会发生其中的checkB ...

随机推荐

  1. icinga 被动模式 nsca 安装

    本文假设读者已安装好icinga,此外nsca本身nagios插件,icinga/nagios都适用 一.编译安装nsca1.编译,拷贝文件tar -vxzf nsca-2.7.2.tar.gz./c ...

  2. nexus私服安装

    一.搭建nexus私服.当前服务器版本是jdk1.8    . nexus安装包下载:http://www.sonatype.org/nexus/archived 先是下载目前最新的版本 Nexus ...

  3. 安卓kernel自主唤醒系统方法—设置alarm

    我们知道alarm一般是上层设置后.kernel驱动里面将set time写入alarm寄存器,到达时间后trigger,殊不知kernel里面也能够自主设置alarm. 尤其是系统在休眠时驱动nee ...

  4. 二叉排序树BST代码(JAVA)

        publicclassTest{     publicstaticvoid main(String[] args){         int[] r =newint[]{5,1,3,4,6,7 ...

  5. 【网络流#7】POJ 3281 Dining 最大流 - 《挑战程序设计竞赛》例题

    不使用二分图匹配,使用最大流即可,设源点S与汇点T,S->食物->牛->牛->饮料->T,每条边流量为1,因为流过牛的最大流量是1,所以将牛拆成两个点. 前向星,Dini ...

  6. javascript小数四舍五入

    javascript小数四舍五入 1. function get(){    var s = 22.127456 + "";    var str = s.substring(0, ...

  7. python 下的数据结构与算法---8:哈希一下【dict与set的实现】

    少年,不知道你好记不记得第三篇文章讲python内建数据结构的方法及其时间复杂度时里面关于dict与set的时间复杂度[为何访问元素为O(1)]原理我说后面讲吗?其实就是这篇文章讲啦. 目录: 一:H ...

  8. 匹配不含有某个信息的sql语句写法

    SELECT id,order_id,flight_info FROM order_flights WHERE mark=0 AND flight_info REGEXP '[^() DAY)]' O ...

  9. JavaWeb学习笔记之Servlet(二)

    1.  GenericServlet 抽象类: 1). 是一个 Serlvet. 是 Servlet 接口和 ServletConfig 接口的实现类. 但是一个抽象类. 其中的 service 方法 ...

  10. X-Y Problem

    X-Y Problem 对于X-Y Problem的意思如下: 1)有人想解决问题X2)他觉得Y可能是解决X问题的方法3)但是他不知道Y应该怎么做4)于是他去问别人Y应该怎么做? 简而言之,没有去问怎 ...