博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android ListView分页加载时图片显示问题
阅读量:5265 次
发布时间:2019-06-14

本文共 746 字,大约阅读时间需要 2 分钟。

场景:Android ListView需要分页加载,每个item中会有图片,图片又是从网络下载的。

问题:在滑动加载下一页时,上一页的图片明明已经下载完成了,但是无法显示出来。

Bug重现:

1,加载了第1页的数据,图片在后台下载(下载完成后更新ImageView),向下滑动ListView。

2,滑动到listview的最下面,请求第2页数据

3,第2页数据返回,调用adater.notifyDataSetChanged()刷新listview。

    这时整个listview会重绘,系统调用adapter.getView方法重新绘制每一条数据,前一页的ImageView被销毁掉了

    这个时候,当前一页的图片下载完成后,再来调用之前ImageView的setImageBitmap方法,就会没反应,图片显示不出来(因为listview重绘了,之前的ImageView已经无效了)。

 

解决方案:

1,在adapter中记录下最新的ImageView,如:用Map<Integer, ImageView> viewMap来暂存最新的图片,key是position

2,设置imageView.setTag(imageUrl),

3,当adater.notifyDataSetChanged()被调用时,viewMap.put(position, imageView)会重新调用,viewMap旧的ImageView会被替换成新的ImageView

4,当图片下载结束时,遍历viewMap,比较imageUrl.equals(imgView.getTag()),如果相等则设置图片即可。

 

转载于:https://www.cnblogs.com/java-koma/p/4244030.html

你可能感兴趣的文章
Linux中防火墙centos
查看>>
mysql新建用户,用户授权,删除用户,修改密码
查看>>
FancyCoverFlow
查看>>
JS博客
查看>>
如何设置映射网络驱动器的具体步骤和方法
查看>>
ASP.NET WebApi 基于OAuth2.0实现Token签名认证
查看>>
283. Move Zeroes把零放在最后面
查看>>
Visual Studio Code 打开.py代码报Linter pylint is not installed解决办法
查看>>
Python 数据类型
查看>>
S5PV210根文件系统的制作(一)
查看>>
centos下同时启动多个tomcat
查看>>
slab分配器
查看>>
【读书笔记】C#高级编程 第三章 对象和类型
查看>>
针对sl的ICSharpCode.SharpZipLib,只保留zip,gzip的流压缩、解压缩功能
查看>>
【转】代码中特殊的注释技术——TODO、FIXME和XXX的用处
查看>>
【SVM】libsvm-python
查看>>
Jmeter接口压力测试,Java.net.BindException: Address already in use: connect
查看>>
Leetcode Balanced Binary Tree
查看>>
九.python面向对象(双下方法内置方法)
查看>>
go:channel(未完)
查看>>