当前位置: 首页 > news >正文

成都网站建设策划办公系统

成都网站建设策划,办公系统,seo引擎优化,天津设计公司招聘一.观察者模式:(待完善,这个写的不咋地,没理解透彻) 1.观察者模式的概念: (1)消息传递方向:被观察者->观察者 (2)代码实现: 首…

一.观察者模式:(待完善,这个写的不咋地,没理解透彻)

1.观察者模式的概念:

(1)消息传递方向:被观察者->观察者

(2)代码实现:

首先具有一个接口,该接口是所有观察者的父接口,各个子观察者通过实现这个接口来实例化一个观察者对象,而被观察者会持有观察者对象的引用。至于怎么将观察者对象传给这个引用的方法有很多,比如通过在被观察者对象类里面写set方法让观察者对象来调用、利用构造函数的参数传递等等。

(3)快速记忆:

被观察者:持有引用;在什么时候去做这件事情;

观察者:实现接口;具体做什么事情;

2.RecyclerView中的观察者模式:

(1)简介:RecyclerView中的Adapter的整体实现就是一个观察者模式

(2)源码分析:(以notifyDataSetChanged()为例)

<1>RecyclerView中的Adapter,是一个内部静态类:

public abstract static class Adapter<VH extends RecyclerView.ViewHolder> {//被观察者private final RecyclerView.AdapterDataObservable mObservable = new RecyclerView.AdapterDataObservable();//注册观察者public void registerAdapterDataObserver(@NonNull RecyclerView.AdapterDataObserver observer) {this.mObservable.registerObserver(observer);}//注销观察者public void unregisterAdapterDataObserver(@NonNull RecyclerView.AdapterDataObserver observer) {this.mObservable.unregisterObserver(observer);}//调用被观察者的方法public final void notifyDataSetChanged() {this.mObservable.notifyChanged();}}

<2>AdapterDataObservable ,被观察者对象类:

 static class AdapterDataObservable extends Observable<RecyclerView.AdapterDataObserver> {public void notifyChanged() {for(int i = this.mObservers.size() - 1; i >= 0; --i) {//遍历所有的子观察者,调用子观察者的onChanged()方法((RecyclerView.AdapterDataObserver)this.mObservers.get(i)).onChanged();}}}

<3>AdapterDataObserver 类,调用onChanged()方法,这是抽象类:

 public abstract static class AdapterDataObserver {public void onChanged() {}}

<4>RecyclerViewDataObserver 类,为AdapterDataObserver类的实现类,真正调用onChanged()方法的地方:

 private class RecyclerViewDataObserver extends RecyclerView.AdapterDataObserver {public void onChanged() {RecyclerView.this.assertNotInLayoutOrScroll((String)null);RecyclerView.this.mState.mStructureChanged = true;RecyclerView.this.processDataSetCompletelyChanged(true);if (!RecyclerView.this.mAdapterHelper.hasPendingUpdates()) {//重新绘制界面RecyclerView.this.requestLayout();}}}

<5>setAdapter()方法,调用此方法来设置adapter:

 public void setAdapter(@Nullable RecyclerView.Adapter adapter) {this.setLayoutFrozen(false);this.setAdapterInternal(adapter, false, true);this.processDataSetCompletelyChanged(false);this.requestLayout();}

<6>setAdapterInternal()方法

 private void setAdapterInternal(@Nullable RecyclerView.Adapter adapter, boolean compatibleWithPrevious, boolean removeAndRecycleViews) {if (this.mAdapter != null) {//注销观察者this.mAdapter.unregisterAdapterDataObserver(this.mObserver);this.mAdapter.onDetachedFromRecyclerView(this);}if (adapter != null) {//注册观察者adapter.registerAdapterDataObserver(this.mObserver);adapter.onAttachedToRecyclerView(this);}}

(3)总结:

Recyclerview中的Adapter可以理解为观察者的父类,我们可以自己实现一个继承自Recyclerview中的Adapter的子类,也就是实例化一个观察者对象。然后通过Recyclerview中的setAdapter()方法可以将这个对象设置给被观察者。例如此时在这个对象中调用notifyDataSetChanged()方法,那么最终会调用被观察者的notifyChanged()方法。

二.其他(待更新)

RecyclerView 中的设计模式 | Agehua

http://www.yayakq.cn/news/77081/

相关文章:

  • 百色做网站360云盘做服务器建设网站
  • 中国校园网站做的比较好的学校jsp页面模板
  • 机关单位网站管理部门应建立怎么建设网站百度搜索的到
  • 自己建设影视网站js网站页面效果代码
  • 东莞企业网站建设开发公司百度云域名怎么做网站
  • 巨腾网站建设门户网站建设说明书
  • 如何建设网站视频教程装修注意事项及细节
  • 中国郑州建设信息网站wordpress文章批量编辑器
  • 阳江 网站开发自己电脑做网站域名备案
  • 网站开发与维护的相关大学做网站被抓
  • 网站做业务赚钱吗博兴网站建设招聘
  • 曲周企业做网站推广郑州比较厉害的设计公司
  • 网站运营工作是干什么的汕头网站模板价格
  • 网站建设项目需求营销型网站建设市场分析
  • dw做的网站怎么上传图片wordpress上传至哪个目录下
  • 班级响应式网站html格式深圳高端网站开发
  • 嵌入式网站开发培训企业网站建设合同范本
  • 邯郸百度网站建设软文营销的技巧有哪些?
  • 吉林省住房建设厅网站php网站开发实例代码
  • 网站 什么语言开发网站线上运营
  • 长春网站建设开发的有哪些哪些网站可以做店淘客
  • 快飞建站巴中区建设局网站
  • 凯叔讲故事网站谁做的国学网站源码
  • 建设购物网站需要多少费用网站开发是前端还是
  • 深圳网站建设公司信任湖南岚鸿信 赖微信哪里可以做视频网站
  • 中山本地网站建设推广企业服装生产厂商网站建设方案
  • 网站做的好不好看什么做服装招聘的网站
  • 凡客网站官网做网站推广的公司发展前景
  • 东莞响应式网站seo优化的方法有哪些
  • 网站维护页面源码招聘网站怎么做效果好