• Android ListView分页加载时图片显示问题


    场景: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()),如果相等则设置图片即可。

  • 相关阅读:
    C语言-错误处理
    C语言-排序和查找
    PCB设计要点
    C语言-调试
    c++ 概述
    C语言-指针
    C语言-数组与指针 字符与字符串
    C语言-(void*)类型指针
    C语言-字符操作函数
    C语言-链表
  • 原文地址:https://www.cnblogs.com/java-koma/p/4244030.html
Copyright © 2020-2023  润新知