我有一个ListView
应显示包含一些文本和图像的项目。使用SimpleCursorAdapter进行异步绑定
数据从本地SQLite
db文件(包含文本和图像URL)加载。
我想:
- 从数据库获取文本,网址。
- 异步下载URL中的图像
- 将两个值绑定到
ListView
(使用SimpleCursorAdapter
)。
到目前为止,我能够从数据库中读取值,但是我不确定如何在运行绑定后才能成功加载每个图像?
换句话说,我想异步绑定每个元素,因为它被加载到适当的UI项目。
我有一个ListView
应显示包含一些文本和图像的项目。使用SimpleCursorAdapter进行异步绑定
数据从本地SQLite
db文件(包含文本和图像URL)加载。
我想:
ListView
(使用SimpleCursorAdapter
)。到目前为止,我能够从数据库中读取值,但是我不确定如何在运行绑定后才能成功加载每个图像?
换句话说,我想异步绑定每个元素,因为它被加载到适当的UI项目。
这里是一个很好的例子,它显示了如何这。
简而言之,
1),你需要有一个Map<Url, Bitmap>
。
2)当服务器的图像数据不可用时,显示默认图像。
3)让您的ListView
的onScroll侦听器知道当前显示哪些项目。
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
我假设你正在使用一个CursorLoader? – njzk2 2013-03-05 09:28:44
no ...使用下载的AsynTask派生类 – 2013-03-05 09:31:00