滚动时,请将下载的图像保持在列表视图中



我正在开发我的第一个应用程序,在这里读了很多。

一个多星期以来,我一直在努力为以下问题找到解决方案,但没有成功。我有一个Adapter,它扩展了ArrayAdapter以显示每行中的图像和3行文本。在getView内部,我为TextView分配相关信息,并使用ImageLoader类下载图像并将其分配给ImageView

一切都很好!我的屏幕上有4.5行可见(总共20行)。当我第一次向下滚动时,图像会继续下载,并按正确的顺序分配到列表中。

但当我向后滚动时,列表会丢失所有图像,并开始按正确顺序重新绘制它们(每张图像0.5-1秒)。从我读到的内容来看,这是标准的列表性能,但我想改变它。

我希望,一旦图像被下载,它将被"粘贴"到当前窗口的整个会话的列表中。就像在联系人列表或市场中一样。它只有20个图像(每个6-9kb)。

希望我能解释清楚自己。

下载后,您需要缓存每个映像,每次适配器需要检查它是否已经下载,从缓存(磁盘或内存)中获取,否则下载它。

起初,我建议您阅读安卓开发网站上的本教程http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html

或者使用像这样的外部libhttps://github.com/koush/UrlImageViewHelper

这里的问题是ArrayAdapter在您滚动时重用列表视图行,因此当您向下滚动时,最上面的行将被重用并插入列表的底部(出于性能原因)。

在这里,您最好尝试在设备上本地缓存图像,以避免每次调用ImageLoader。

解决这个问题的一个很好的库是点火。它是开源的,可以在这里获得:https://github.com/kaeppler/ignition

请参阅RemoteImageView,以获得缓存机制的一个好例子。

最新更新