




已阅读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湖北黄冈市武穴市赴高校专项招聘职教中心教师9人模拟试卷及答案详解(各地真题)
- 2025江苏盐城市急救医疗中心招录政府购买服务用工1人考前自测高频考点模拟试题及一套完整答案详解
- 2025年洛阳博物馆人才引进考前自测高频考点模拟试题及完整答案详解1套
- 2025湖南省第二人民医院(湖南省脑科医院)高层次人才公开招聘20人模拟试卷有答案详解
- 2025广东广州市增城区人民法院招聘合同制司法警察兼囚车驾驶员拟聘用人员模拟试卷有答案详解
- 2025年福建省莆田华侨职业中专学校校聘教师招聘1人考前自测高频考点模拟试题及参考答案详解一套
- 2025江苏连云港市灌云县招聘就业困难人员公益性岗位26人考前自测高频考点模拟试题及答案详解(各地真题)
- 2025北京林业大学雄安校区规划建设指挥部招聘1人模拟试卷及完整答案详解
- 2025江苏中科能源动力研究中心招聘编制内高层次专业技术人才1人(连云港市)模拟试卷附答案详解
- 2025年安徽省三支一扶招聘考试(962人)考前自测高频考点模拟试题附答案详解(黄金题型)
- 小学生心理团辅方案与记录模板
- 2025年淮南市大通区和寿县经开区公开招聘社区“两委”后备干部30名备考考试题库附答案解析
- 国防科大优势课件
- 消毒供应中心包装课件
- 人教PEP版(2024)三年级上册英语教案全册教案
- 河道生态修复工程重点难点分析
- 《红星照耀中国》
- 《房屋市政工程生产安全重大事故隐患判定标准(2024版)》解读
- 金华兰溪市卫生健康局所属事业单位招聘笔试真题2024
- 学习《水利水电工程生产安全重大事故隐患判定导则-SLT 842》课件
- 1.3 逐层分类细化分类结果【知识精研】二年级上册数学(人教版2024)
评论
0/150
提交评论