我有一个自定义数组适配器,用于包含图像视图的列表视图。在自定义适配器类中,我有一个异步任务,它从列表中每个项目的唯一 url 下载唯一图片。问题是每个项目的 ImageViews 不断更改图片。请问通过自定义数组适配器类中的 AsyncTask 从 url 获取图像有什么问题。
需要帮助(任何形式)
我有一个自定义数组适配器,用于包含图像视图的列表视图。在自定义适配器类中,我有一个异步任务,它从列表中每个项目的唯一 url 下载唯一图片。问题是每个项目的 ImageViews 不断更改图片。请问通过自定义数组适配器类中的 AsyncTask 从 url 获取图像有什么问题。
需要帮助(任何形式)
为 ListView(或任何其他适配器来源的视图)启动异步加载的问题是,一旦离开屏幕,视图就可以被重用。处理这个最简单的方法是使用一个库来为你做这件事,我最喜欢的是AQuery
如果您不想走那条路,则必须扮演自己的角色。为此,您需要检查 AsyncTask 完成时的视图是否显示与启动时相同的内容。调用setTag(tag)
您在适配器的getView()
. 然后在将图像设置为 ImageView 之前,调用getTag()
视图并检查它是否与您设置的对象相同。它应该看起来像这样:
final View view = MY VIEW;
final Object tag = new Object();
view.setTag(tag);
new AsyncTask() {
...
public void onPostExecute(Bitmap bar) {
if(tag.equals(view.getTag()) {
imageView.setImage(bar);
}
}
...
}.execute();
return view;
然后你就可以开始缓存之类的了。复杂吧?所以,是的,你应该使用图书馆。
看看那些可以帮助你的库 :)
Picasso
Universal Image Loader