已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/* * (Subject)(Observer)* * MVCObserverObserver* SubjectObserver* * * * Observer* * 1. * * 2. * 3. * * 1. Subject* * * 2. Observer* * 3. ConcreteSubject* ConcreteObserver* * 4. ConcreteObserver* ConcreteObserver* * Observer* */UMLAndroid.DataSetObserverObservable<T>DataSetObserverableObserver()DataSetObserver2framework/base/core/java/android/database/DataSetObserver.javapackage android.database;/* Receives call backs when a data set has been changed, or made invalid. The typically data sets* that are observed are link Cursors or link android.widget.Adapters.* DataSetObserver must be implemented by objects which are added to a DataSetObservable.*/public abstract class DataSetObserver /* This method is called when the entire data set has changed,* most likely through a call to link Cursor#requery() on a link Cursor.*/public void onChanged() / Do nothing/* This method is called when the entire data becomes invalid,* most likely through a call to link Cursor#deactivate() or link Cursor#close() on a* link Cursor.*/public void onInvalidated() / Do nothingSubject()Observable<T>observerframework/base/core/java/android/database/Observable.javapackage android.database;import java.util.ArrayList;/* Provides methods for (un)registering arbitrary observers in an ArrayList.*/public abstract class Observable<T> /* The list of observers. An observer can be in the list at most* once and will never be null.*/protected final ArrayList<T> mObservers = new ArrayList<T>();/* Adds an observer to the list. The observer cannot be null and it must not already* be registered.* param observer the observer to register* throws IllegalArgumentException the observer is null* throws IllegalStateException the observer is already registered*/public void registerObserver(T observer) if (observer = null) throw new IllegalArgumentException("The observer is null.");synchronized(mObservers) if (mObservers.contains(observer) throw new IllegalStateException("Observer " + observer + " is already registered.");mObservers.add(observer);/* Removes a previously registered observer. The observer must not be null and it* must already have been registered.* param observer the observer to unregister* throws IllegalArgumentException the observer is null* throws IllegalStateException the observer is not yet registered*/public void unregisterObserver(T observer) if (observer = null) throw new IllegalArgumentException("The observer is null.");synchronized(mObservers) int index = mObservers.indexOf(observer);if (index = -1) throw new IllegalStateException("Observer " + observer + " was not registered.");mObservers.remove(index);/* Remove all registered observer*/public void unregisterAll() synchronized(mObservers) mObservers.clear();ConcreateSubject()OberverArrayList<Observer>Oberveractionframework/base/core/java/android/database/DataSetObservable.javapackage android.database;/* A specialization of Observable for DataSetObserver that provides methods for* invoking the various callback methods of DataSetObserver.*/public class DataSetObservable extends Observable<DataSetObserver> /* Invokes onChanged on each observer. Called when the data set being observed has* changed, and which when read contains the new state of the data.*/public void notifyChanged() synchronized(mObservers) / since onChanged() is implemented by the app, it could do anything, including/ removing itself from link mObservers - and that could cause problems if/ an iterator is used on the ArrayList link mObservers./ to avoid such problems, just march thru the list in the reverse order.for (int i = mObservers.size() - 1; i >= 0; i-) mObservers.get(i).onChanged();/* Invokes onInvalidated on each observer. Called when the data set being monitored* has changed such that it is no longer valid.*/public void notifyInvalidated() synchronized (mObservers) for (int i = mObservers.size() - 1; i >= 0; i-) mObservers.get(i).onInvalidated();ConcreateObserver(),actionandroidframework/base/core/java/android/widget/AbsListView.javaclass AdapterDataSetObserver extends AdapterView<ListAdapter>.AdapterDataSetObserver Overridepublic void onChanged() super.onChanged();if (mFastScroller != null) mFastScroller.onSectionsChanged();Overridepublic void onInvalidated() super.onInvalidated();if (mFastScroller != null) mFastScroller.onSectionsChanged();framework/base/core/java/android/widget/AdapterView.javaclass AdapterDataSetObse()rver extends DataSetObserver private Parcelable mInstanceState = null;Overridepublic void onChanged() mDataChanged = true;mOldItemCount = mItemCount;mItemCount = getAdapter().getCount();if (DBG) Xlog.d(TAG, "AdapterView onChanged: mOldItemCount = " + mOldItemCount+ ",mItemCount = " + mItemCount + ",getAdapter() = " + getAdapter()+ ",AdapterView = " + AdapterView.this, new Throwable("onChanged");/ Detect the case where a cursor that was previously invalidated has/ been repopulated with new data.if (AdapterView.this.getAdapter().hasStableIds() && mInstanceState != null&& mOldItemCount = 0 && mItemCount > 0) AdapterView.this.onRestoreInstanceState(mInstanceState);mInstanceState = null; else rememberSyncState();checkFocus();requestLayout();Overridepublic void onInvalidated() mDataChanged = true;if (DBG) Xlog.d(TAG, "AdapterView onInvalidated: mOldItemCount = " + mOldItemCount+ ",mItemCount = " + mItemCount + ",getAdapter() = " + getAdapter()+ ",AdapterView = " + AdapterView.this, new Throwable("onInvalidated");if (AdapterView.this.getAdapter().hasStableIds() / Remember the current state for the case where our hosting activity is being/ stopped and later restartedmInstanceState = AdapterView.this.onSaveInstanceState();/ Data is invalid so we should reset our statemOldItemCount = mItemCount;mItemCount = 0;mSelectedPosition = INVALID_POSITION;mSelectedRowId = INVALID_ROW_ID;mNextSelectedPosition = INVALID_POSITION;mNextSelectedRowId = INVALID_ROW_ID;mNeedSync = false;checkFocus();requestLayout();public void clearSavedState() mInstanceState = null;BaseAdapterBaseAdapterDataSetObservableregisterDataSetObserverunregisterDataSetObserverObservernotifyDataSetChangedObserveronChange()ListViewBaseAdapterBaseAdapteritemnotifyDataSetChanged()ListviewBaseAdapterregisterDataSetObserver(DataSetObserver observer)ObserverListviewListView/* Sets the data behind this ListView.* The adapter passed to this method may be wrapped by a link WrapperListAdapter,* depending on the ListView features currently in use. For instance, adding* headers and/or footers will cause the adapter to be wrapped.* param adapter The ListAdapter which is responsible for maintaining the* data backing this list and for producing a view to represent an* item in that data set.* see #getAdapter()*/Overridepublic void setAdapter(ListAdapter adapter) if (mAdapter != null && mDataSetObserver != null) mAdapter.unregisterDataSetObserver(mDataSetObserver);resetList();mRecycler.clear();if (mHeaderViewInfos.size() > 0| mFooterViewInfos.size() > 0) mAdapter = new HeaderViewListAdapter(mHeaderViewInfos, mFooterViewInfos, adapter); else mAdapter = adapter;mOldSelectedPosition = INVALID_POSITION;mOldSelectedRowId = INVALID_ROW_ID;/ AbsListView#setAdapter will update choice mode states.super.setAdapter(adapter);if (mAdapter != null) mAreAllItemsSelectable = mAdapter.areAllItemsEnabled();mOldItemCount = mItemCount;mItemCount = mAdap
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (完整版)苏教六年级下册期末数学模拟真题试卷经典套题
- 客服部服务提升计划与客户满意度分析
- 扶贫项目物资管理员工作心得体会
- 心理战术与沟通技巧职场与商业交流宝典
- 小学教师必-备能力与面试技巧
- 医院后勤管理设施维护与保洁工作指南
- 推拿技巧详解专业人员的实-用指南
- 地铁公务员面试实战技巧
- 定向健身教练培训课程及合格标准
- 干部面试技巧如何克服紧张情绪
- 期末综合测试(试卷)-2025-2026学年六年级上学期数学人教版(含答案解析)
- 2025年地质勘探试题及答案
- 手术室巡回护士的工作流程与配合
- 2025版食品制造食品安全前提方案PRPs
- 【甲子光年】张一甲:2025人工智能产业30条判断
- 2025年宜宾市兴文县辅警招聘考试题库附答案解析
- 2025年下半年国元农业保险股份有限公司安徽分公司社会招聘12名笔试考试备考题库及答案解析
- 宜宾市叙州区事业单位2025年下半年公开考核招聘工作人员(24人)考试笔试模拟试题及答案解析
- 2025年中国电子烟行业发展研究报告
- 涂装代工外包合同范本
- 品质经理年终述职报告
评论
0/150
提交评论