Android的事件处理

Android的事件处理机制分为两类

1.基于监听器的事件处理方式

      主要做法是为Android的界面组件捆绑特定的监听器。

  •       在基于监听器的事件处理方式下,涉及三类对象:

     (1)事件源: 事件发生的场所,通常就是各种组件。

     (2)事件: 用户操作了某个组件上的特定动作,触发事件。事件这个对象中,封装相关信息。

     (3)事件监听器:针对监听到事件,做响应动作。

  •       监听器实现步骤:

     (1)获得事件源,即被监听的对象;

     (2)实现事件监听器类,此类必须实现一个XxxListener的接口。

     (3)调用事件源的setXxxListener方法注册一个监听器实例。

       注意事件的对象不一定出现在监听器类定义上。有的时候,发生的事件比较简单,不需要传递事件的对象。有时候,则需要的。

     

  class Mylistener implements OnClickListener
  {
       public void onClicked(View view){……};    //没有传递事件的对象;
  }


class MyListener implments OnKeyListener
{
      public boolean onKey(View source,int keyCode,KeyEvent event){……}    //传递了事件的对象。
}

  •       View类中,还包含如下几个内部监听器接口,使用时必须实现这些接口。

     View.OnClickListener:负责单击事件。

     View.OnCreateContextMenuListener:监听上下文菜单事件的创建事件。

     View.onFocusChangeListener:监听焦点改变的监听事件。

     View.onKeyListener:按键事件的监听器。

     View.onLongClickListener: 监听长单击。

     View.onTouchListener:监听触摸事件。

2.基于回调方法的事件处理方式

      主要做法是重写Android上对应的组件类中的回调方法。

  

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("-MyButton-" , "the onKeyDown in MyButton");
		//返回false,表明并未完全处理该事件,该事件依然向外扩散
		return false;
	}
}


  • 基于回调的事件传播:   

       几乎所有基于回调的事件处理方法都由Boolean类型的返回值。当返回true时,说明此处理方法完全处理的
这个事件,此事件不再向外传播。返回false时,则此处理方法不能完全处理此次事件,将事件继续向外传播。  

public class Propagation extends Activity
{
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		Button bn = (Button)findViewById(R.id.bn);
		//为bn绑定事件监听器
		bn.setOnKeyListener(new OnKeyListener()
		{
			@Override
			public boolean onKey(View source
				, int keyCode, KeyEvent event)
			{
				//只处理按下键的事件
				if (event.getAction() == KeyEvent.ACTION_DOWN)
				{
					Log.v("-Listener-" , "the onKeyDown in Listener");
				}
				// 返回false,表明该事件会向外传播
				return true;
			}
		});
	}
	//重写onKeyDown方法,该方法可监听它所包含的所有组件的按键被按下事件
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event)
	{
		super.onKeyDown(keyCode , event);
		Log.v("-Activity-" , "the onKeyDown in Activity");
		//返回false,表明并未完全处理该事件,该事件依然向外扩散
		return false;
	}
}

     组件被按下时刻,首先触发的是此按键捆绑的事件监听器。接着触发此组件的事件回调方法,然后将事件传播      到该组件的所在的activity上并调用activity的对应回调方法.


3.两种事件处理方式的对比:

  •    基于监听的方式下,事件监听器和事件源由分开实现,因此具有更好的危害性。Android的事务处理机制保证监听器优先被触发。
  •    基于回调函数的方式下,在重写组件本身,提高了内聚性。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值