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

来源:互联网 发布:刷爱奇艺vip永久软件 编辑:程序博客网 时间:2024/05/17 23:16

                                                      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两种事件处理方式?

               不难发现基于监听事件处理模型具有更大的优势,
  基于监听的事件模型分工更明确,事件源,事件监听由两个类分工实现,因此具有更好的课维护性。所以通常优先考虑基于监听的事件处理


0 0
原创粉丝点击