ArrayAdapter:带有图像视图的列表视图的自定义数组适配器不断加载错误的图像

时间:2013-11-07 00:56:00

标签: android android-listview android-asynctask

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

需要帮助(以任何形式)

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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;

然后你可以开始缓存等等。复杂吧?所以是的,你应该使用一个库。