android listview滑动过程中图片显示重复错位闪烁问题解决

android listview滑动过程中图片显示重复错位闪烁问题解决

ID:33870760

大小:65.50 KB

页数:4页

时间:2019-03-01

android listview滑动过程中图片显示重复错位闪烁问题解决_第1页
android listview滑动过程中图片显示重复错位闪烁问题解决_第2页
android listview滑动过程中图片显示重复错位闪烁问题解决_第3页
android listview滑动过程中图片显示重复错位闪烁问题解决_第4页
资源描述:

《android listview滑动过程中图片显示重复错位闪烁问题解决》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、http://www.mobiletrain.org/AndroidListView滑动过程中图片显示重复错位闪烁问题解决主要分析AndroidListView滚动过程中图片显示重复、错乱、闪烁的原因及解决方法,顺带提及ListView的缓存机制。1、原因分析ListViewitem缓存机制:为了使得性能更优,ListView会缓存行item(某行对应的View)。ListView通过adapter的getView函数获得每行的item。滑动过程中,a.如果某行item已经滑出屏幕,若该item不在缓存内,则put进缓存,否则更新缓存;b.

2、获取滑入屏幕的行item之前会先判断缓存中是否有可用的item,如果有,做为convertView参数传递给adapter的getView。更具体可见源代码ListView.obtainView。 这样,如下的getView写法就可以充分利用缓存大大提升ListView的性能。即便上万个行item,最多inflate的次数为n,n为一屏最多显示ListView行item的个数。ListViewAdaptergetView写法Java12345678910111213141516@OverridepublicViewgetView(intpo

3、sition,ViewconvertView,ViewGroupparent){ViewHolderholder;if(convertView==null){convertView=inflater.inflate(R.layout.list_item,null);holder=newViewHolder();……convertView.setTag(holder);}else{holder=(ViewHolder)convertView.getTag();}} /***ViewHolder*北京千锋互联科技有限公司版权所有http://w

4、ww.mobiletrain.org/1718192021222324*@authortrinea@trinea.cn2013-08-01*/privatestaticclassViewHolder{ ImageViewappIcon;TextView  appName;TextView  appInfo;}这样提升了性能,但同时也会造成另外一些问题:a.行item图片显示重复这个显示重复是指当前行item显示了之前某行item的图片。比如ListView滑动到第2行会异步加载某个图片,但是加载很慢,加载过程中listView已经滑动到了第

5、14行,且滑动过程中该图片加载结束,第2行已不在屏幕内,根据上面介绍的缓存原理,第2行的view可能被第14行复用,这样我们看到的就是第14行显示了本该属于第2行的图片,造成显示重复。 b.行item图片显示错乱这个显示错乱是指某行item显示了不属于该行item的图片。比如ListView滑动到第2行会异步加载某个图片,但是加载很慢,加载过程中listView已经滑动到了第14行,第2行已不在屏幕内,根据上面介绍的缓存原理,第2行的view可能被第14行复用,第14行显示了第2行的View,这时之前的图片加载结束,就会显示在第14行,造成

6、错乱。 c.行item图片显示闪烁上面b的情况,第14行图片又很快加载结束,所以我们看到第14行先显示了第2行的图片,立马又显示了自己的图片进行覆盖造成闪烁错乱。 2、解决方法通过上面的分析我们知道了出现错乱的原因是异步加载及对象被复用造成的,如果每次getView能给对象一个标识,在异步加载完成时比较标识与当前行item的标识是否一致,一致则显示,否则不做处理即可。下面以使用ImageCache为ListView提供图片获取缓存为例,ListView中强烈推荐使用北京千锋互联科技有限公司版权所有http://www.mobiletrain

7、.org/ImageCache。首先在listviewadapter的getView中添加Java1234567891011121314151617181920@OverridepublicViewgetView(intposition,ViewconvertView,ViewGroupparent){ViewHolderholder;if(convertView==null){convertView=inflater.inflate(R.layout.list_item,null);holder=newViewHolder();……con

8、vertView.setTag(holder);}else{holder=(ViewHolder)convertView.getTag();} ……//addtagforimag

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。