Android的CursorAdapter与CursorFilter机制
来源:互联网 发布:虚拟仿真软件 编辑:程序博客网 时间:2024/06/14 08:26
言归正传,Android为ListView提供了Filter对象,对显示的条目进行过滤。最常见的用法就是Contact中,根据在输入框中输入姓名的字母显示过滤。当然android系统中默认提供的过滤功能非常有限,不支持号码或是其他信息过滤。我曾见过有人为了支持对号码的过滤,就将Android提供的那套机制屏蔽掉,每当过滤事件发生时,手动起AsyncQueryHander去异步查询。当查询完毕时调用CursorAdapter.changeCursor更新Cursor。虽然基本上做法没错,流程上也跟Android实现过滤的机制大体相同,但重复了制造轮子的过程,而原有的轮子,只需稍加修改足以满足新的需求。
我们只需要重写public Cursor runQueryOnBackgroundThread(CharSequence constraint),或者实现接口FilterQueryProvider的对象,再将该对象setFilterQueryProvider给CursorAdapter即可。
下面分析下CursorAdapter与Filter的实现框架。
先说下Filter:
Filter与AsyncQueryHander实现基本类似,它包含两个Hander:RequestHandler和ResultHandler,以及一个HandlerThread:名为Filter的线程。RequestHandler与Filter线程绑定,过滤请求都是通过RequestHandler发送给Filter线程。当过滤产生后,通过mResultHandler将数据push给UI显示。
CursorFilter继承Filter,它提供了CursorFilterClient接口,CursorAdapter实现CursorFilterClient接口。CursorFilter会在过滤的某些点回调CursorFilterClient接口的对应函数,我们就是通过这些被回调的函数,改变Filter的行为,以实现自己的目的。这与我们熟知的Activity生命周期上的:onCreate->onResume->onPause......的做法类似。
来看下这个重要的接口CursorFilterClient的定义
interface CursorFilterClient {
CharSequence convertToString(Cursor cursor);
Cursor runQueryOnBackgroundThread(CharSequence constraint);
Cursor getCursor();
void changeCursor(Cursor cursor);
}
runQueryOnBackgroundThread是运行在Filter线程中,返回的Cursor将传给ResultHandler,最后传给UI显示。所以上面的例子中,我们要添加对号码的查询,只需在这里自己组织下查询条件,包含对号码的查询,找数据库查询下,将查询结果返回即可。
changeCursor在ResultHandler向UI送结果时被调用,通过它更新显示过滤后的数据。我们可以重载它,在过滤数据显示前,做点需要的事情(比如更新下SectionIndexer)。
getCursor只是返回下Adapter中保存的Cursor,convertToString在CursorAdapter没有被用到,不管它了。
- Android的CursorAdapter与CursorFilter机制
- Android的CursorAdapter与CursorFilter机制
- Android的CursorAdapter与CursorFilter机制
- Android cursor和cursorAdapter 的监听机制
- Android CursorAdapter的使用
- android CursorAdapter的监听事件
- android CursorAdapter的监听事件
- Android CursorAdapter简单的实现
- Android 中 CursorAdapter 的用法
- Android CursorAdapter
- BaseAdapter与CursorAdapter的结合使用举例
- Android中CursorAdapter的使用详解
- Android中CursorAdapter的使用详解
- Android基础之CursorAdapter 的用法与获取联系人信息显示、并点击拨号
- Android 为什么当数据库改变时,与CursorAdapter关联的页面始终不更新
- CursorAdapter刷新机制
- Android 使用自定义cursorAdapter
- Android之CursorAdapter用法
- android vnc server使用
- Ubuntu 下Chromium安装Flash插件
- 6.5 Device Interface
- SIFT解析(二)特征点位置确定
- HMM理解以及相关算法
- Android的CursorAdapter与CursorFilter机制
- 环境搭建
- HDU 1722 Cake
- 归并排序 MergeSort
- sql操作字段
- Use External Storage Process Big Data(1)
- SIFT解析(三)生成特征描述子
- 二分查找 初篇
- How To Collect 10046 Trace (SQL_TRACE) Diagnostics for Performance Issues