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

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

ID:6722830

大小:65.50 KB

页数:4页

时间:2018-01-23

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.获取滑入屏幕的行item之前会先判断缓存中是

2、否有可用的item,如果有,做为convertView参数传递给adapter的getView。更具体可见源代码ListView.obtainView。 这样,如下的getView写法就可以充分利用缓存大大提升ListView的性能。即便上万个行item,最多inflate的次数为n,n为一屏最多显示ListView行item的个数。ListViewAdaptergetView写法Java12345678910111213141516@OverridepublicViewgetView(intposition,ViewconvertView,ViewGroupparent){View

3、Holderholder;if(convertView==null){convertView=inflater.inflate(R.layout.list_item,null);holder=newViewHolder();……convertView.setTag(holder);}else{holder=(ViewHolder)convertView.getTag();}} /***ViewHolder*北京千锋互联科技有限公司版权所有http://www.mobiletrain.org/1718192021222324*@authortrinea@trinea.cn2013-08

4、-01*/privatestaticclassViewHolder{ ImageViewappIcon;TextView  appName;TextView  appInfo;}这样提升了性能,但同时也会造成另外一些问题:a.行item图片显示重复这个显示重复是指当前行item显示了之前某行item的图片。比如ListView滑动到第2行会异步加载某个图片,但是加载很慢,加载过程中listView已经滑动到了第14行,且滑动过程中该图片加载结束,第2行已不在屏幕内,根据上面介绍的缓存原理,第2行的view可能被第14行复用,这样我们看到的就是第14行显示了本该属于第2行的图片,造成显

5、示重复。 b.行item图片显示错乱这个显示错乱是指某行item显示了不属于该行item的图片。比如ListView滑动到第2行会异步加载某个图片,但是加载很慢,加载过程中listView已经滑动到了第14行,第2行已不在屏幕内,根据上面介绍的缓存原理,第2行的view可能被第14行复用,第14行显示了第2行的View,这时之前的图片加载结束,就会显示在第14行,造成错乱。 c.行item图片显示闪烁上面b的情况,第14行图片又很快加载结束,所以我们看到第14行先显示了第2行的图片,立马又显示了自己的图片进行覆盖造成闪烁错乱。 2、解决方法通过上面的分析我们知道了出现错乱的原因是异步

6、加载及对象被复用造成的,如果每次getView能给对象一个标识,在异步加载完成时比较标识与当前行item的标识是否一致,一致则显示,否则不做处理即可。下面以使用ImageCache为ListView提供图片获取缓存为例,ListView中强烈推荐使用北京千锋互联科技有限公司版权所有http://www.mobiletrain.org/ImageCache。首先在listviewadapter的getView中添加Java1234567891011121314151617181920@OverridepublicViewgetView(intposition,ViewconvertVi

7、ew,ViewGroupparent){ViewHolderholder;if(convertView==null){convertView=inflater.inflate(R.layout.list_item,null);holder=newViewHolder();……convertView.setTag(holder);}else{holder=(ViewHolder)convertView.getTag();} ……//addtagforimag

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

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

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