异步查询数据库,CursorAdapter

来源:互联网 发布:逐点比较圆弧插补vb 编辑:程序博客网 时间:2024/05/22 15:16

异步查询数据库

写一个类如CommonAsyncQuery继承AsyncQueryHandler,在该类中实现要实现的方法,可以实现的方法有:


假如实现的是onQueryComplete(int token, Object cookie, Cursor cursor)方法时,当调用startQuery开始异步查询数据时,

CommonAsyncQuery asyncQuery = new CommonAsyncQuery(getContentResolver());asyncQuery.startQuery(token, cookie, uri, projection, selection, selectionArgs, orderBy);

查询完毕查询出来的游标结果集cursor,token和cookie都会传递到onQueryComplete方法,并执行此方法。此方法是在主线程中执行的,所以可以在该方法中更改数据。

由于cookie是Object类型的,所以我们直接用一个Adapter,传递过来之后就可以直接更新数据了。

另外,用CursorAdapter异步查询数据库时,要查询的列必须有名为_id的列。


android.widget.CursorAdapter

刷新数据用:

adapter.changeCursor(cursor);

类似于BaseAdapter中的notifyDataSetChange()方法。


传递前,写一个类继承CursorAdapter,实现带Context context, Cursor c两个参数的构造方法,实现未实现的方法:newView和bindView方法。

其中newView是创建一个View,bindView是绑定数据。


给ListView设置Adapter时,因为是创建Adapter的实例,此时的cursor为null,如:

mAdapter = new ConversationAdapter(this , null);


当执行adapter.changeCursor();方法时,会执行该adapter中的newView和bindView方法。并把cursor传递给bindView方法。以便在bindView方法中绑定数据。

在newView方法中也可以用ViewHolder进行优化,该方法返回的View对象会传递给bindView方法,同样在newView方法中可以用view.setTag(holder)方法设置tag,在bindView方法中用view.getTag();方法来获得holder信息。

0 0
原创粉丝点击