观察者模式(摘抄 + 自己的理解)

   在Android中很多内容都用到了观察者模式,比如说BaseAdapterAbsListView View等都有,只是名字各有不同。

Observable表示被观察者,由于这个对象是一个抽象类只能被继承。而Observer表示观察者,它并不是一个类而是一个接口,所以观察者可以有多个,实现了该接口的类都属于观察者。

   观察者可以同时是被观察者,被观察者同样可以是观察者。

   当一个被观察的对象继承自Observable抽象类时,就表示该类可以被很多观察者(实现了Observer接口)观察,其实意思就是说这个对象也就是被观察者“上电视了”,电视前的你也就是观察者可以看,(对象发生变化)电视里被观察者做了别的动作,那么电视前的所有人看到的也就变了,在同一时间改变所有观众看到的画面。

 

1、观察者

Observer)将自己注册到被观察对象(Subject)中,被观察对象将观察者存放在一个容器(Container)里。 

2、被观察对象 

被观察对象发生了某种变化,从容器中遍历所有注册过的观察者,将变化通知观察者。 

3、撤销观察 

观察者告诉被观察者要撤销观察,被观察者从容器中将观察者去除。 

 

   观察者模式的实现过程:“注册——通知——撤销注册”


   观察者将自己注册到被观察者的容器中时,被观察者不应该过问观察者的具体类型,而是应该使用观察者的接口。这样的优点是:假定程序中还有别的观察者,那么只要这个观察者也是相同的接口实现即可。一个被观察者可以对应多个观察者,当被观察者发生变化的时候,他可以将消息一一通知给所有的观察者。基于接口,而不是具体的实现——这一点为程序提供了更大的灵活性。

 

Android事件处理

 


 

示例代码如下图所示:

 


 

 

 

常用的事件接口 

OnClickListener  处理点击事件。 

重写的方法:  OnClick(View v) 

参数:v是事件源控件 

OnLongClickListener 处理View长按事件。 

重写的方法:  OnLongClick(View v) 

参数:v是事件源控件 

OnFocusChangeListener用来处理控件焦点发生改变(失去或获得)的事件。  重写的方法:   OnFocusChange (View v,Boolean hasFocus) 

参数:v同上 

hasFocus是否获得焦点 

OnKeyListener通过对某个View注册该监听,当View获得焦点并有键盘事件时,便会触发该接口中的回调方法。 

重写的方法:   OnKey(View v,int keyCode,KeyEvent event) 

参数:v同上 

keyCode为手机键盘的键盘码 

event为键盘事件封装类对象,包含了事件的详细信息,如事件类型等。 

OnTouchListener用来处理手机屏幕事件的监听接口,当为View的范围内触摸按下、抬起或滑动等动作都会触发该事件。 

 重写的方法:   OnTouch(View v,MotionEvent event)   参数:v同上 

event为事件封装类对象,封装了触发时间的详细信息,同样包括事件的类型、触发时间等信息。使用event.getAction==MotionEvent.ACTION_XXX的形式(还要重写XXX对应的方法) 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值