我正在开发一个从远程服务器加载大量图像的 Android 项目。
我正在使用此实用程序下载图像:
http://code.google.com/p/android-imagedownloader/
主要问题是当任何图像下载完成时,整个屏幕似乎都会重置。
随着视图的重置,动画 UI 控件的位置也会重置。
我正在开发一个从远程服务器加载大量图像的 Android 项目。
我正在使用此实用程序下载图像:
http://code.google.com/p/android-imagedownloader/
主要问题是当任何图像下载完成时,整个屏幕似乎都会重置。
随着视图的重置,动画 UI 控件的位置也会重置。
该代码基于两年前的一篇文章,此后 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();
}
}