您的位置:首页 > 移动开发 > Android开发

深入理解Android事件处理(二)

2014-12-25 15:45 447 查看
Android事件处理(二)

2、基于回调事件的处理

如果说事件监听是一种委托的事件处理,那么回调机制恰好相反,对于回调机制事件处理模型来说,事件源和时间监听器是统一的,或者说事件监听器完全消失了,当组件激发某个事件时,组件自己特定的方法会负责去处理,

而Java又是一个静态语言,我们无法为某个对象动态添加方法,因此只能继承GUI组件类,并重写该类的事件处理方法来实现。


①自定义UI界面来时现基于回调的时间处理机制。

public class MyButton extends Button

{

public MyButton(Context context, AttribueSet set)

{

super(context,set);

}

public boolean onKeyDown(int keyCode,KeyEvent event)

{

super.onKeyDown(keyCode,event);

Log.v("sfs","sdf");

return true; // 返回true表示该事件完全处理,不会传播出去,如果false,表示为完全处理,return false

}

}

在UI 界面添加自定义的Button

<com.sim.demo.MyButton

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="点击我"

/>


3、事件传播

某组件上发生的事件不仅激发了该组件上的回调方法,也会触发该组件所在的Activity的回调方法----只要事件能传播到该Activity

public class Propagation extends Activity

{

puglic void onCreate(Bundle savedInstanceState){

super.onCreate(saveInstanceState);

bt = findViewById(R.id.bn);

bt.setOnKeyListener(new OnKeyListener()

{

public boolean onKey(View source,int keyCode,KeyEvent event)

{

if(event.getAction()==KeyEvent.ACTION_DOWN){

Toast.makeText(getApplicationContext(),
"触发了点击效果",

Toast.LENGTH_SHORT).show();

}

return false; //会向外扩散

}

});

public boolean onKeyDown(int keyCode,KeyEvent event)

{

Toast.makeText(getApplicationContext(),
"触发了点击效果",

Toast.LENGTH_SHORT).show();

return true;

}

}

上面就会触发两次效果

④对比Android两种事件处理方式?



不难发现基于监听事件处理模型具有更大的优势,

基于监听的事件模型分工更明确,事件源,事件监听由两个类分工实现,因此具有更好的课维护性。所以通常优先考虑基于监听的事件处理
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: