异步查询数据库
写一个类如CommonAsyncQuery继承AsyncQueryHandler,在该类中实现要实现的方法,可以实现的方法有:
假如实现的是onQueryComplete(int token, Object cookie, Cursor cursor)方法时,当调用startQuery开始异步查询数据时,
CommonAsyncQuery asyncQuery = new CommonAsyncQuery(getContentResolver()); asyncQuery.startQuery(token, cookie, uri, projection, selection, selectionArgs, orderBy);
由于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信息。