我有一个ListView
应该显示包含一些文本和图像的项目。
数据从本地SQLite
db 文件(包含文本和图像 URL)加载。
我想:
- 从 DB 中获取文本、url。
- 从 URL 异步下载图片
- 将这两个值绑定到
ListView
(使用SimpleCursorAdapter
)。
到目前为止,我能够从 DB 中读取值,但是我不确定只有在成功加载每个图像之后才能运行绑定?
换句话说,我想在加载到适当的 UI 项时异步绑定每个元素。
我有一个ListView
应该显示包含一些文本和图像的项目。
数据从本地SQLite
db 文件(包含文本和图像 URL)加载。
我想:
ListView
(使用SimpleCursorAdapter
)。到目前为止,我能够从 DB 中读取值,但是我不确定只有在成功加载每个图像之后才能运行绑定?
换句话说,我想在加载到适当的 UI 项时异步绑定每个元素。
这是一个很好的例子,它展示了如何使用这个http://www.androidkit.com/loading-images-from-remote-server-over-http-on-a-separate-thread。
简要地,
1)你需要有一个Map<Url, Bitmap>
.
2) 有一个默认图像,当来自服务器的图像数据不可用时显示。
3)有 onScroll 监听器ListView
,以了解当前显示的项目。
4)首先,下载正在显示的那些。
5) 下载图像后,调用notifyDataSetChanged()
将可用图像绑定到视图。
6)你可以使用Softreferences
或LRUCache
避免OutofMemoryException
我已经解决了与此类似的问题。我从服务器收到一个 XML 并将信息存储在数据库中。之后,我使用 CursorAdapter 填充了列表。就我而言,我既有图像又有文字。
为了解决光标适配器中的问题,我做了这样的事情:
@Override
public void bindView(View v, Context ctx, Cursor c) {
TextView title = (TextView) v.findViewById(R.id.titleID);
title.setText(c.getString(c.getColumnIndex(yourColumName)));
ImageView i = (ImageView) v.findViewById(R.id.ImageID);
String s = c.getString(c.getColumnIndex(youtImageColumn));
imageLoader.DisplayImage(s,i);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View v = inflater.inflate(R.layout.yourRowLayout, parent, false);
return v;
}
在这种情况下,ImageLoader 是从这里获得的异步延迟图像加载器: https ://github.com/thest1/LazyList