我正在开发我的第一个应用程序,在这里读了很多。
一个多星期以来,我一直在努力为以下问题找到解决方案,但没有成功。我有一个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
,以获得缓存机制的一个好例子。