【问题标题】:ArrayAdapter : Custom array adapter for list view with image view keeps loading wrong imagesArrayAdapter:带有图像视图的列表视图的自定义数组适配器不断加载错误的图像
【发布时间】:2013-11-07 00:56:00
【问题描述】:

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

需要帮助(任何形式)

【问题讨论】:

  • 需要代码。请发布一些代码,否则没有人可以帮助您。

标签: android android-listview android-asynctask


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    为 ListView(或任何其他适配器来源的视图)启动异步加载的问题是,一旦离开屏幕,视图就可以被重用。处理这个最简单的方法是使用一个库来为你做,我最喜欢的是AQuery

    如果您不想走那条路,就必须扮演自己的角色。为此,您需要检查 AsyncTask 完成时的视图是否显示与启动时相同的内容。在适配器的getView() 中返回的视图上调用setTag(tag)。然后在将图像设置为 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;
    

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

    【讨论】:

    • 真的很复杂!感谢您的回答和见解
    猜你喜欢
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    相关资源
    最近更新 更多