我有一个非常令人沮丧的问题,我不知道出了什么问题。我构建了仅包含 GridView 的简单 XML。这个 gridview 应该显示从我用我的代码检索的特定 url 下载的图像 (ImageView)。
所以这个 APP 的想法只是从 URLS 下载图像并在 GridView 中显示这些图像。首先我必须说我正在使用通用图像加载器库。首先请看我的getView代码:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView iv;
if(convertView == null) {
iv = new ImageView(MyActivity.this);
iv.setLayoutParams(new GridView.LayoutParams(size,size));
iv.setScaleType(ImageView.ScaleType.CENTER_CROP);
Log.d("APP", "convertView is NULL");
}
else {
iv = (ImageView) convertView;
Log.d("APP", "convertView is NOT null");
}
loader.displayImage(URLS.get(position), iv);
return iv;
}
问题:
上面的代码有效,它在 GridView 中显示图像。但是当我向下滚动时,我看到:
- 所有图像都已下载(即使是那些不可见的图像)
- 当我向上滚动时,我看到该图像位于 0 位,位于 1 位,并且已再次下载。当我向下滚动时,图像再次切换位置。向上滚动,我再次看到图像再次切换位置(并再次下载)。这是无限的。
我是如何解决这个问题的:
我通过不检查 convertView 变量是否为空来解决了这个问题。实际上我省略了 if/else 子句。
我在内存中使用了缓存 = true。因此,下载停止和图像永远存在。
那我为什么要求助?主要是因为我知道出于性能原因我不应该省略 if/else 子句。我不想弄乱用户的记忆,我想给他们带来快速可靠的用户体验。我也想知道什么可能是错的。
谢谢你的帮助。很受好评。