Android 事件处理分为回调事件处理和监听事件处理两类
(一)回调事件处理:
当用户操作激发某事件时由事件源自身的处理方法来处理该事件,往往通过重写View组件来实现
事件(Event):用户的某个操作所携带的信息
事件源(EventSource):产生事件的源头,通常是一些可视化的组件(如Button)
监听器(EventListener):监听事件发生与响应事件的机制
例如(重写一个Button类):
public class ExButton extends Button{
public ExButton(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO 自动生成的构造函数存根
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO 自动生成的方法存根
this.setText("it has been clicked");
return true;
}
}
直接在布局文件中应用该组件:
<com.example.test.ExButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="a Button"
/>
回调事件处理的传播问题:
回调事件处理需要返回一个boolean值,当返回时true时,表示处理方法已经完全处理该事件,事件不会传播;
当返回是false时,事件未处理完全,会传播
传播顺序为:监听器→组件提供的回调方法→组件所在的Activity
其中任何一个返回true,中断处理
(二)监听器事件处理
类似于Java中AWT和Swing编程的时间处理机制
三要素:事件源,事件,事件监听器
核心:实现事件监听器
需要事件(Event)对象的情况:当事件发生时有比较多的信息需要传给事件监听器时,则将信息封装成Event对象,
将Event对象传递给事件处理函数。
监听器(Listener)的几种形式:
1)匿名内部类:
使用最广泛,直接在将事件监听器注册给事件源时(view.setOnXxxListener(new OnXxxListener))创建匿名内部类形式
事件监听器
例子:
button.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View _view){
Intent intent=new Intent(MainActivity.this,secondActivity.class);
startActivity(intent);
}
});
2)内部类:
例如:
button.setOnClickListener(new ExClickListener());
class ExClickListener implements View.OnClickListener{}
3)外部类:
在外部实现一个监听器接口,由于与GUI界面不耦合,一般不使用
4)Activity本身实现Listener接口:
直接在Activity内写事件处理方法
5)在XML中写事件监听:
android:onClick="事件处理方法"