【Android-基础】
点击进入【Android-基础】的目录,获得更多学习资源
文章目录
- 【Android-基础】
- 前言
- 一、基于监听的
- 二、基于回调的
- 总结
前言
在Android开发中,不可避免的要涉及到交互
,可能是人机之间的交互,也可能是组件之间的交互。总之,一个app不可能是一成不变的,只要有变化,就需要用触发这个变化的条件以及变化的效果,这个就是事件
存在意义。
或者可以说,事件就是为了解决交互这一问题而产生的
。
android中的事件处理有两种:
基于监听的、基于回调的。
一、基于监听的
为UI组件绑定事件监听器:
事件监听器绑定到事件源(UI组件)–>外部动作–>事件源(UI组件)–>事件–>事件监听器处理
根据上面的流程,可以分离出三个对象:
事件监听器、事件源、事件。
说这么多理论没有意义,直接举个例子就懂了。
关于“基于监听的”最简单的例子就是:按钮的点击事件监听
事件监听器就是你的Listener
,事件源就是你的UI组件:按钮
,事件就是点击
。这样是不是就能很清晰的理解“基于监听的”事件处理机制了。
二、基于回调的
方式就是重写(比如重写android组件的回调方法):
下面举例重写activity的回调方法
举例:
public class TestActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
System.out.println("按下了按键");
return super.onKeyDown(keyCode, event);
}
}
代码的简单解释:
利用回调监听物理按键的时候,android为每一个按键都定义了一个int常量,只需判断其
KeyCode是不是等于按键对应的常量即可。
比如“返回键”的常量是:KEYCODE_BACK
在activity的onKeyDown回调方法中,通过if判断其参数keyCode==KEYCODE_BACK就知道
当前是否按下的是“返回键”
一个不怎么引人注意的点
:
不知你是否注意到onKeyDown这个方法返回的是一个Boolean值。
正常情况下,当你点击屏幕会触发两个监听:触摸监听和点击监听。
但是触摸监听的事件处理方法是有一个布尔类型的返回值的,这个返回值的意义就是:
是否完全消耗这个交互
当返回的是true的时候,代表触摸这个动作已经完全消耗这个交互了,所以点击这个动作
就不会被触发,就不会再去执行点击监听。
当返回的是false,还会继续去执行点击的监听。
这个值得留意,因为曾经因为不知道这个,写了一堆废代码,算是一个坑吧,这里贴出来,也算是一个总结。
总结
这两种事件的处理机制,究竟如何选用,主要还是看具体的业务,比如,就是一个简单的按钮被点击,被长按等等这种事件,用“基于监听的”机制是比较容易的。
但是如果是程序运行中触发了某些条件
,比如业务中某个类被加载了,我需要在加载这个类之后,做一些事情,这时候就可以使用
“基于回调的”机制。
概括来说:
基于回调的方式,用来处理一些通用的事件;
特定的某些情况下,比如某些UI组件的事件处理,就用基于监听的。