android listview 只加载显示的图片大小,Android中一个ListView中图片加载的问题

博客围绕Android ListView图片加载展开。起初用Fresco库加载图片无问题,后续迭代需分离图片背景和icon,手动处理背景时因itemview复用,导致背景复用问题。通过在adapter的getView方法中判断viewHolder类型,手动清理特殊情况的view背景解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大概如下图所示的一种需求:整体是一个列表,列表最末尾有一项和其他item略有区别的item。

808323889865

image.png

刚开始时,由于左侧都是按照图片来加载,并没有出现任何问题。使用Fresco库加载,也不会出现列表滑动时,图片错乱的问题。

然而后续迭代时,需要将图片的背景和icon分离,方便产品配置颜色或者支持主题等。

因此这个ImageView就分为两部分处理,icon部分继续交给Fresco加载,背景部分则需要自己处理。这里是根据图片的url来判断,如果符合要求,则手动构造一个drawable并setBackground()到相关的view当中去。

然而由于listview中,itemview的视图实际上是会被复用的,因此当对其中某些view设置了background后,滑动几次,这个view将可能被复用到各个itemview上,特别的,对于尾部的item,非常容易获取到头部item的缓存视图。即便所有icon都能正常加载,但是item的背景依然会出现复用的情况。

知道问题根源,解决其他就很简单,在adapter的getView方法中,判断当前viewHolder的类型,如果是末尾这种特殊的情况,手动清理view的background即可。

PS:Android view.setBackgroundDrawable()方法已经被设为废弃,而view.setBackGround()方法最小支持sdk 16,项目最低支持sdk 15也是蛋疼。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值