Android中一个ListView中图片加载的问题

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


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也是蛋疼。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,659评论 25 709
  • 一、适用场景 ListViewListview是一个很重要的组件,它以列表的形式根据数据的长自适应展示具体内容,用...
    Geeks_Liu阅读 10,817评论 1 28
  • 我是谁。我每天都在过日子,却不知道,我是什么样的呢…… 现在我来回想一下自己,单从长相上看,我是一个什么女孩呢...
    向日葵的花语阅读 270评论 1 2
  • 小摩尔, 今天你兴奋地告诉我你的数学期中考试成绩,妈妈真为你骄傲。但是最高兴的肯定是你自己对吧? 虽然好成绩带来成...
    晶莹晶莹阅读 149评论 0 1
  • 每个人在日常的工作中,都需要面对别人表达一些内容,或许几个人,或许几十个人,甚至更多,这种表达方式都可以称之为演讲...
    余无忌阅读 937评论 2 14