Android还提供了一种基于回调的时间处理模型。代码上回调处理更简单
3.3.1 回调机制与监听机制
当用户在GUI组件上激发某个事件时,组件自己特定的方法将会负责处理该事件
为了实现回调机制类处理GUI组件发生的时间,Android为所有GUI组件都提供了一些时间处理回调方法。以View为例:
- boolean onKeyDown(int keyCode, KeyEvent event)
- boolean onKeyLongPress(int keyCode, KeyEvent event)
- boolean onKeyShortcut(int keyCode, KeyEvent event)
- boolean onKeyUp(int keyCode, KeyEvent event)
- boolean onTouchEvent(MotionEvent event)
- boolean onTrackballEvent(MotionEvent event):当用户在该组件上触发轨迹球屏事件时
示例代码:
public
class
MyButton
extends
Button{
public
MyButton(Context context, AttributeSet set)
{
super (context, set);
}
@Override
public boolean onKeyDown( int keyCode, KeyEvent event)
{
super .onKeyDown(keyCode, event);
Log.v( "test for ce" , "the onKeyDown in MyButton" );
// Toast.makeText(getApplicationContext(), "you have call the ", Toast.LENGTH_SHORT).show();
return true ;
}
{
super (context, set);
}
@Override
public boolean onKeyDown( int keyCode, KeyEvent event)
{
super .onKeyDown(keyCode, event);
Log.v( "test for ce" , "the onKeyDown in MyButton" );
// Toast.makeText(getApplicationContext(), "you have call the ", Toast.LENGTH_SHORT).show();
return true ;
}
}
3.3.2 基于回调的事件传播
几乎所有基于回调的时间处理方法都有一个boolean类型的返回值,标识是否能完全处理该事件
- 返回true,表明该方法已完全处理该事件,该事件不会传播出去
- 返回false,表明该处理方法并未完全处理,该事件会传播出去
某组件上所发出的事情不仅激发该组件上的回调方法,也会触发该组件所在Activity的回调方法——只要事件能传播出去
3.3.3 重写onTouchEvent方法响应触摸屏事件
基于监听的事件处理模型具有更大的优势:
- 基于监听的事件处理模型,分工更明确,具有更好的可维护性
- Android的事件处理机制保证基于监听的事件监听器会优先被触发