0

我正在开发一个从远程服务器加载大量图像的 Android 项目。

我正在使用此实用程序下载图像:

http://code.google.com/p/android-imagedownloader/

主要问题是当任何图像下载完成时,整个屏幕似乎都会重置。

随着视图的重置,动画 UI 控件的位置也会重置。

4

1 回答 1

0

该代码基于两年前的一篇文章,此后 Android 开发人员提供了更好的信息和方法来处理 ListView Adaptewr 中的异步图像。

理想情况下,您应该实现一个 ImageDownload 类或某种类型,并使用notifyDataSetChanged();您的调用ListViewAdpater来正确更新视图。

创建一个 ImageLoadedCallback:

// Interfaces
public interface ImageLoadedCallback {
  public void imageLoaded(Drawable imageDrawable, String imageUrl);
}

在您的 ListAdapter 上实现它:

这段代码所做的就是让下一个项目显示在列表中,然后查看我们是否有可用的图像,如果有的话 - 设置它。如果没有,发送我们的异步请求来加载它,然后让适配器知道它已经准备好了。

public class ArticleAdapter extends SimpleCursorAdapter implements ImageLoadedCallback {
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    if(getCursor().moveToPosition(position)) {
      ViewHolder viewHolder;

      if(convertView == null) {
        convertView = inflater.inflate(R.layout.article_list_item, null);
        viewHolder = new ViewHolder();
        viewHolder.image = (ImageView) convertView.findViewById(R.id.imgArticleImage);
        convertView.setTag(viewHolder);
      } else {
        viewHolder = (ViewHolder) convertView.getTag();
      }
      String image = getCursor().getString(getCursor().getColumnIndex("thumbURL"));
      if(imgCache.hasImage(image)) {
        viewHolder.image.setImageDrawable(imgCache.loadDrawable(image, this));
      } else {
       imgCache.loadDrawable(image, this);
      }
    }
    return convertView;
  }

  public void imageLoaded(Drawable imageDrawable, String imageUrl) {
    this.notifyDataSetChanged();
  }
}
于 2012-07-05T15:58:34.183 回答