【发布时间】:2011-10-05 20:09:19
【问题描述】:
主要问题:
在利用 ViewHolder 模式的简单 ListView 适配器中延迟加载远程图像的最有效的无错误方法是什么?
我目前有一个实现,它将首先检查 SoftReference Bitmap HashMap 以获取图像的软缓存版本。如果失败,我会检查我的硬缓存以获取图像的副本。如果失败,我会从网上得到它。我在一个单独的线程和队列中执行所有这些操作,以消除并发或重复下载。
问题在于通过回调加载时。因为我使用 ViewHolder 模式,所以我的视图不断被回收,我还没有找到一种可靠的方法来消除随机附加到我的 ImageView 的不同图像。我在每次加载之前都默认使用默认图像,但是因为视图被回收得如此之快,所以“旧”侦听器应用到我的 ImageView 上,提供了错误的图像,然后用正确的图像替换。
我发现的唯一半固态解决方案是将 ViewHolder 本身用作侦听器,但这只会使问题不那么明显。它仍然会在快速滚动时发生。
任何帮助将不胜感激。
更新:
【问题讨论】:
-
这对我来说也很烦人,有时会迫使我不使用回收机制(性能以换取更好的用户体验,即看不到交换图像)。如果您解决了这个问题,如果您发布自己的答案,将不胜感激,您将从我这里得到 +1 :) 如果我发现任何东西,我也会发布一些东西
-
我看到了同样的 sh*tty 行为。 Android 的另一个领域,系统本身没有帮助,而是迫使每个用户从头开始重新实施解决方案。大多数在迭代 1-5 时失败。是的,我有点像 Android 粉丝
标签: android listview android-listview