本文部分参考 http://www.cnblogs.com/ufocdy/archive/2011/03/17/1987327.html
主要是以简单的语言说明cursor和cursorAdapter的监听机制
先来讲讲cursor的监听机制,
给cursor加监听很简单,调用cursor.registerContentOberserver()即可,然后重写onChange()方法,这样数据库变化,就会回调onChange方法
背后的监听机制是什么呢?
cursor是接口,实现应该是在AbstractCursor里面,AbstractCursor有一个ContentObservable继承自Observable,这个就是经典的观察者模式了,
调用这个方法后,会向这里注册一个观察者,来监控数据库
现在有观察者了,那数据库变化,又是怎么通知过来的呢?
还记得自定义provider的时候,有一句必须要加的话不?在add和update和delete的时候--->cur.setNotificationUri(getContext().getContentResolver(), uri);
这里就是通知observer数据库变化的,其实是通知AbstractCursor的setNotificationUri
public void setNotificationUri(ContentResolver cr, Uri notifyUri) {
synchronized (mSelfObserverLock) {
mNotifyUri = notifyUri;
mContentResolver = cr;
if (mSelfObserver != null) {
mContentResolver.unregisterContentObserver(mSelfObserver);
}
mSelfObserver = new SelfContentObserver(this);
mContentResolver.registerContentObserver(mNotifyUri, true, mSelfObserver);
mSelfObserverRegistered = true;
}
}
然后上面我们不是刚好通过cursor在这个AbstractCursor中加入了观察者么?原来世界如此美好,数据库的变化一切尽在监控之中
再来说说cursorAdapter的监听
cursorAdapter自己内部已经做好了监听,你想在数据库变化后做一些改变,只要重写onContentChanged()即可
那么它是如何监听的呢?
其实他的机制和上面的cursor是一样,在你调用cusoradapeter.changeCursor方法的时候,系统会调用一个 cursorAdapter.registerContentObserver和registerDatasetObserver,同时取消上次注册的监 听
然后呢?然后就没有然后了,你坐等数据库变化就可以了
相关推荐
内容概要: ...能学到什么:ContentProvider、ContentResolver、CursorAdapter、Cursor、后台服务、前台服务、绑定服务、自定义广播、播放进度条、OnClickListener监听器 适用人群:Android开发初学者
在Android开发中,ListView是用于显示大量数据列表的常用组件,而CursorAdapter则是与数据库查询结果(Cursor对象)配合使用的适配器。本篇将详细阐述CursorAdapter与ListView结合使用的核心概念、步骤以及最佳实践...
4. **改变数据的监听**:使用`registerDataSetObserver()`和`unregisterDataSetObserver()`方法,CursorAdapter可以监听到数据集的变化,例如当数据库中的数据发生变化时,Adapter会自动更新视图。 在实际的项目中...
CursorAdapter Filter是Android开发中的一个重要概念,主要用于在ListView或GridView等视图中过滤和显示数据库查询结果。在Android应用开发中,我们常常需要从SQLite数据库中检索数据,并将其动态地展示给用户。...
通过这个 "CursorAdapter demo",你可以了解到如何在实际项目中有效地展示数据库查询结果,特别是在处理大量数据时,CursorAdapter 的高效和灵活性使其成为 Android 开发中的重要工具。在实践中,你还可以结合 ...
通过findViewById()方法获取布局中的元素,并进行事件监听和数据绑定。 6. 性能优化:考虑到大量单词查询可能导致性能问题,可以使用缓存、分页加载、异步查询等策略来优化。例如,使用HashMap缓存最近查询的结果,...
SQLite是Android系统中内置的关系型数据库,用于存储和管理应用程序中的结构化数据。...了解并熟练掌握SimpleCursorAdapter和CursorAdapter的使用,能极大地提升Android应用的数据展示效率和用户体验。
本项目“android平台联系人管理应用源码+项目”提供了一个可以直接运行的实例,对于学习和理解Android联系人管理的实现机制非常有帮助。以下是基于这个项目的一些关键知识点和详细说明: 1. **Android开发环境**:...
通过学习这个"android-simple-listview-app"示例,开发者可以了解如何使用CursorAdapter和SQLite数据库来创建一个动态更新的ListView,这对于开发包含大量数据的Android应用是非常有用的。同时,这个项目也展示了...
在与数据库结合的案例中,我们通常使用CursorAdapter,因为它可以直接与SQLite数据库查询结果(Cursor对象)进行交互。首先,你需要创建一个SQLite数据库,使用SQLiteOpenHelper类的子类,重写`onCreate()`和`...
综上所述,`AutoCompleteTextView` 和 `MultiAutoCompleteTextView` 在Android开发中扮演着重要的角色,它们能有效提升用户的输入体验,节省用户的时间。通过熟练掌握这些控件的使用,开发者可以构建出更加友好和...
在Android开发中,ListView和Spinner是两种非常常用的UI组件,它们在数据展示和用户交互方面起着关键作用。本文将详细讲解如何在Android应用中实现ListView和Spinner,并结合不同的数据源进行实例操作。 首先,我们...
`CursorAdapter`是用于绑定Cursor(SQLite查询结果)和ListView等视图的Adapter,它会在`ContentObserver`触发更新时重新查询数据并刷新界面,确保UI与数据源始终保持一致。 在实际开发中,开发者需要注意如何正确...
在Android开发中,SQLite和ListView是两个非常重要的基础组件,它们在构建应用程序时扮演着不可或缺的角色。SQLite是一个轻量级的数据库系统,用于在移动设备上存储和管理数据,而ListView则是显示大量有序数据的...
Android的Content Provider是不同应用间共享数据的主要机制。对于通讯录,你需要使用`ContactsContract`类来与系统的联系人提供者交互。你可以通过`Uri`对象查询、插入、更新或删除联系人。 3. **数据查询与显示**...
在XML布局文件中,可以使用`<Spinner>`标签来声明Spinner,并通过`android:id`、`android:layout_width`和`android:layout_height`属性来指定其ID、宽度和高度。 ```xml android:id="@+id/my_spinner" android:...
3. 内容提供者:Android的Content Provider机制允许应用之间共享数据。为了实现通讯录管理,我们需要创建一个自定义的Content Provider,它会暴露通讯录数据接口。通过URI,其他应用可以查询、插入、更新或删除联系...