【解决自定义多选ListView乱序问题】

解决Android自定义多选ListView乱序问题

正常情况下,自定义带CheckedBox的ListView的时候,香港服务器,如果Items的数目超过一个屏幕,你会发现被checked的Item在屏幕滚动之后会出现乱序现象。

出现这种乱序现象的原因可以参考如下博文

如上述,Android为我们提供了一个ListView的缓冲机制,在屏幕滚动时,会重新利用被遮挡(即上一个屏幕的Items)的View进行更新显示。这也难怪我们的选择状态的显示会不尽人意。

既然知道了其原因,香港虚拟主机,解决办法也就应运而生了。

【办法一】如网上所说,禁用android提供的缓冲机制,即在getView开头人为使得convertView变为null,从而强制为每一个item创建一个新的view用于显示。

但是当listview要显示的量比较大时,这个方法就显得有点臃肿不堪。

Bill今早根据网上各位仁兄的方法,琢磨了个比较简单的解决办法(之所以简单,是因为这个方法只针对具有CheckedBox的ListView,而对于要保存ImageView之类的ListView,除网上的讲解外,网站空间,bill自己还没有想出更好的办法),不知道是否对大家有所帮助。

【办法二】既然我们因为数据量太大的原因确实有必要使用android自带的缓冲机制,那么禁用它看来是不现实了。现在问题的思考点就转到“在这种缓冲机制存在的情况下,如何能够正确地显示checked的状态?”,或者更加明白一点“在缓冲机制存在的情况下,CheckedBox的状态会发生改变,如何保存这些状态并在之后正确还原?”

Bill的思路如下:android要更新回收站中的item就让它更新吧,我用另外的空间记录每个CheckedBox之前的选中状态,等到要显示对应CheckedBox的时候再根据之前记录的状态手动设置CheckedBox的状态即可。

一下是本解决方案的Demo:

以下是测试效果:

【未进行手动处理之前】

点选0、4两项

之后向下滚屏,发现并未勾选的9、14项却被勾选了

再滚回第一页,发现0、4项已经被取消,却勾上了第6项

【使用方法2之后】

照样勾选0、4项

之后向下滚屏,并未出现上述乱序情况

屏幕回滚并点击统计按钮,得到正确结果

本文出自 “Bill_Hoo专栏” 博客,请务必保留此出处

也站在未路让我牵挂的人。

【解决自定义多选ListView乱序问题】

相关文章:

你感兴趣的文章:

标签云: