1

我有一个自定义数组适配器,用于包含图像视图的列表视图。在自定义适配器类中,我有一个异步任务,它从列表中每个项目的唯一 url 下载唯一图片。问题是每个项目的 ImageViews 不断更改图片。请问通过自定义数组适配器类中的 AsyncTask 从 url 获取图像有什么问题。

需要帮助(任何形式)

4

2 回答 2

0

为 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;

然后你就可以开始缓存之类的了。复杂吧?所以,是的,你应该使用图书馆。

于 2013-11-07T01:12:04.673 回答
0

看看那些可以帮助你的库 :)
Picasso
Universal Image Loader

于 2013-11-07T01:03:29.817 回答