使用SimpleCursorAdapter的异步绑定



我有一个ListView,它应该显示包含一些文本和图像的项目。

数据从本地SQLite db文件(包含文本和图像的url)加载。

我想:

  • 从数据库获取文本、url。
  • 从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)为ListView设置onScroll监听器,以了解当前显示的项目。
4)首先,下载那些正在显示的。
5)一旦下载了一个图像,调用notifyDataSetChanged()将可用的图像绑定到视图。6)您可以使用SoftreferencesLRUCache来避免使用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

最新更新