首页 文章 精选 留言 我的

精选列表

搜索[安全事件管理],共10000篇文章
优秀的个人博客,低调大师

android CursorAdapter的监听事件

//contentObserver只是通知数据库中内容变化了 cursor.registerContentObserver(mChangeObserver); //datasetObserver是调用requery之后通知上层cursor数据内容已经更新 cursor.registerDataSetObserver(mDataSetObserver); 我们的调用流程如下: 当我们使用getContentResolver().query()的时候,我们的resolver会通过uri找到对应的provider,调用相应的query()方法, 该方法中的部分内容: SQLiteDatabase db = mOpenHelper.getReadableDatabase(); Cursor ret = qb.query(db, projection, selection,selectionArgs, null, null, finalSortOrder); // TODO: Does this need to be a URI for this provider. ret.setNotificationUri(getContext().getContentResolver(), uri); return ret; Cursor本身只是接口,实际调用的应该是AbstractCursor 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; } } //AbstractCursor的内部类 protected static class SelfContentObserver extends ContentObserver { WeakReference<AbstractCursor> mCursor; public SelfContentObserver(AbstractCursor cursor) { super(null); mCursor = new WeakReference<AbstractCursor>(cursor); } @Override public boolean deliverSelfNotifications() { return false; } @Override public void onChange(boolean selfChange) { AbstractCursor cursor = mCursor.get(); if (cursor != null) { cursor.onChange(false); } } } ContentObservable mContentObservable = new ContentObservable();//AbstractCursor持有的contentObservable //AbstractCursor的onchange() protected void onChange(boolean selfChange) { synchronized (mSelfObserverLock) { mContentObservable.dispatchChange(selfChange); if (mNotifyUri != null && selfChange) { mContentResolver.notifyChange(mNotifyUri, mSelfObserver);//selfChange = false } } } AbstractCursor中 public void registerContentObserver(ContentObserver observer) { mContentObservable.registerObserver(observer); } 在ContentObservable中 public void dispatchChange(boolean selfChange) { synchronized(mObservers) { for (ContentObserver observer : mObservers) { if (!selfChange || observer.deliverSelfNotifications()) { observer.dispatchChange(selfChange); } } } } 在CursorAdapter中我们注册了ContentObserver private classChangeObserverextends ContentObserver { public ChangeObserver() { super(new Handler()); } @Override public boolean deliverSelfNotifications() { return true; } @Override public void onChange(boolean selfChange) { onContentChanged(); } } //父类的方法 public final void dispatchChange(boolean selfChange) { if (mHandler == null) { onChange(selfChange); } else { mHandler.post(new NotificationRunnable(selfChange)); } } //父类的内部类 private final classNotificationRunnableimplements Runnable { private boolean mSelf; public NotificationRunnable(boolean self) { mSelf = self; } public void run() { ContentObserver.this.onChange(mSelf); } } 在CursorAdapter中 protected void onContentChanged() { if (mAutoRequery && mCursor != null && !mCursor.isClosed()) { if (Config.LOGV) Log.v("Cursor", "Auto requerying " + mCursor + " due to update"); mDataValid =mCursor.requery(); } } 在AbstractCursor中 public boolean requery() { if (mSelfObserver != null && mSelfObserverRegistered == false) { mContentResolver.registerContentObserver(mNotifyUri, true, mSelfObserver); mSelfObserverRegistered = true; } mDataSetObservable.notifyChanged();//任何继承AbstractCursor的Cursor都将通过调用super.requery()执行此句 return true; } 如果我们注册了dataset的observer,就会得到相应的通知。 总结: contentObserver是一个提前通知,这时候只是通知cursor说,我的内容变化了。 datasetObserver是一个后置通知,只有通过requery() deactivate() close()方法的调用才能获得这个通知。 因此,最为重要的还是ContentObserver,它可以告诉你数据库变化了,当然如果你要在更新完Cursor的dataset之后做一些 事情,datasetObserver也是必需的。 本文转自wanqi博客园博客,原文链接:http://www.cnblogs.com/wanqieddy/archive/2011/06/23/2088290.html如需转载请自行联系原作者

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册