关于ListView异步加载图片导致图片显示混乱以及ListView ...
来源:互联网
前面看到有帖子中有人使用notifyDataSetChanged()来解决ListView中异步加载图片第一张图片显示错误问题。首先在数据源没有变化的情况下没有必要使用notifyDataSetChanged(),会导致调用requestLayout()重绘当前界面的列,就是重新走getView().所以notifyDataSetChanged()在图片都已下载缓存完的情况下正常显示了,但是因为重新刷新界面了导致了效率变低。其实要知道ListView图片混乱都是因为重用了ConvertView,但这个是ListView性能的关键。我们为什么说建议在ListView中使用ViewHolder,按我的理解其一是能够保存ConvertView中各个View的引用,使得不需要每次都findViewById严重影响效率,其二是我们可以拿到View的引用后使用setTag()和getTag()方法,道理跟ConvertView.setTag()和ConvertView.getTag()是一样的。所以在异步加载图片的时候我们给予ImageView一个Tag,在加载完成回调的时候根据这个Tag来判断是否要把图片设置到当前的ImageView中。前面看到有帖子中有人使用notifyDataSetChanged()来解决ListView中异步加载