主要问题:
在使用ViewHolder模式的简单ListView适配器中,什么是最高效、无bug的远程图片懒加载方法?
我目前的实现方式是首先检查一个SoftReference位图HashMap,查找是否有该图片的软缓存版本。如果失败,则检查硬缓存中是否有该图片的副本。如果再次失败,就从网络上获取。我将所有这些操作都放在一个单独的线程和队列中,以消除并发或重复下载。
问题出现在通过回调函数进行加载时。由于我使用了ViewHolder模式,我的视图不断被回收利用,我没有找到一种可靠的方法来消除不同的图片随机附加到我的ImageViews上的情况。每次加载之前,我会默认显示一张默认图片,但由于视图被如此快速地回收利用,“旧”的监听器会应用到我的ImageView上,提供错误的图片,然后被正确的图片替换掉。
我唯一找到的半靠谱的解决方案是使用ViewHolder本身作为监听器,但这只能使问题不那么明显。在快速滚动时仍然会出现问题。
任何帮助都将不胜感激。
更新: