Android 提供了两种方式的事件处理机制:<1> 基于监听的事件处理; <2> 基于回调的事件处理。
(说明:事件处理就是为用户动作提供响应的机制)
一、基于监听的事件处理
1、两种方式
(1)为 Android 界面组件绑定特定的事件监听器。(常用该方式)
(2)在界面布局文件中,为 UI 组件的 android:onClick 属性指定事件监听方法。(注:该方式需要在 Activity 中定义该事件监听方法)
2、事件监听处理模型
(1)涉及三类对象:
- Event Source(事件源):指事件发生的场所(一般就是各个组件,如:按钮、窗口、菜单等);
- Event(事件):指界面组件上发生的特定事情(一般就是用户的一次具有操作,如:点击、滑动等);
- Event Listener(事件监听器):负责监听在事件源发生的具体事件,并对各种事件作出相应的响应。(其核心就是它所包含的方法,即:事件处理器(Event Handler))
总结:用户具体一个动作就会激发一个相应的事件,该事件就会触发事件源上注册的事件监听器,然后事件监听器会调用对应的事件处理器来做出相应的响应。
(2)基于监听的事件处理机制,是一种委派式事件处理方式:
事件源(组件)将整个事件处理,委托给特定的事件监听器,当该事件源发生指定的事件时,就通知所委托的事件监听器来处理这个事件。
(说明:每个组件均可以针对特定的事件,指定一个事件监听器;每个事件监听器也可以监听一个或多个组件)
(3)实现步骤:
- 在 Activity 中获取界面组件;(即:通过 findViewById() 方法,获取布局文件中的组件);
- 定义一个事件监听器类(必须实现一个 XxxListener 接口),其中必须实现某些方法,这些方法作为事件处理器,用来处理具体的事件;
- 调用事件源的 setXxxListener() 方法(该方法的参数就是上面事件监听器类的一个对象),将事件监听器对象,注册给组件。
注意:对于包含很多信息的复杂事件(如:键盘事件、触屏事件等),Android 会将事件信息封装成 XxxEvent 对象,并把该对象作为参数传入事件处理器方法中。
(4)常见的事件监听器接口:(定义一个事件监听器类,必须要实现一个事件监听器接口)
View.OnClickListener
:单击事件的事件监听器接口View.OnCreateContextMenuListener
:创建上下文菜单事件的事件监听器接口View.OnFocusChangeListener
:焦点改变事件的事件监听器接口View.OnKeyListener
:按键事件的事件监听器接口View.OnLongClickListener
:长按事件的事件监听器接口View.OnTouchListener
:触摸事件的事件监听器接口
(5)代码示例:
// 1、直接使用匿名内部类
public class MainActivity extends Activity {
private Button btnshow;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnshow = (Button) findViewById(R.id.btnshow);
btnshow.setOnClickListener(new OnClickListener() {
// 重写点击事件的处理方法onClick()
@Override
public void onClick(View v) {
// 显示Toast信息
Toast.makeText(getApplicationContext(), "你点击了按钮", Toast.LENGTH_SHORT).show();
}
});
}
}
// 2、使用内部类
public class MainActivity extends Activity