Android事件机制总结

    android一早就有过涉猎,但最近才决定系统的去学习下,然后每次学习完都写一篇博客总结,权当充实下生活。好,进入正题。

  android的事件处理大体上分为两类,一类是基于回调的事件处理,一类是基于监听器的事件处理。对于后者我们并不陌生,它正是java swing中控件的事件的用法,所以先来说说它。

  android的监听器事件处理机制属于一种委派式(Delegation),类比人类社会的分工协作,比如说我们家里的电器坏了我们通常不会自己修,而是直接打电话通知维修公司来帮我们修。用在程序里就是事件源与事件处理分开执行,这种模型的好处就是可以提高程序的可维护性。

  事件监听器的形式有如下几种

  1内部类形式:将事件监听器类定义成当前类的内部类。

  2 外部类形式:将事件监听器类定义为一个外部类。

  3Activity本身作为事件监听器类,让Activity本身实现监听器接口,并实现方法

  4匿名内部类形式:使用匿名内部类创建事件监听器的对象。

  下面一一列举以上的例子(只做说明故不写布局文件)

  1内部类形式:

  

public class EventQs extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_event_qs);
        //获取应用程序中的bn按钮
        Button bn=(Button)findViewById(R.id.bn);
        //为按钮绑定时间监听器
        bn.setOnClickListener(new MyListener());
    }
    //定义事件监听器
    class MyListener implements View.OnClickListener
    {
        //实现监听器类唏嘘实现的方法
        @Override
        public void onClick(View arg0)
        {
            EditText txt=(EditText)findViewById(R.id.txt);
            txt.setText("bn被按钮单机了")
        }
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.event_qs, menu);
        return true;
    }

}


外部类作为事件监听器- -这个就这么简单

  

  

public class TestListener implements OnLongClickListener 
{

    @Override
    public boolean onLongClick(View arg0) 
    {
        
        return false;
    }
    
    
}


Activity本身作为事件监听器

  

public class ActivityListener extends Activity
{
    Button bn;
    @Override
    public void onCreate(Bundle save)
    {
        super.onCreate(save);
        bn=(Button)findViewById(R.id.bn);
        //使用Activity作为事件监听器
        bn.setOnClickListener(this);
    }
    @Override
    public void onClick(View v)
    {
        System.out.println("点击了");
    }
    
}

  

  匿名内部类作为事件监听器(这种方法应该是我们用的比较多的)

public class ActivityListener extends Activity
{
    Button bn;
    @Override
    public void onCreate(Bundle save)
    {
        super.onCreate(save);
        bn=(Button)findViewById(R.id.bn);
        //使用Activity作为事件监听器
        bn.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View arg0) {
                    System.out.println("点击了按钮");
            }
        });
    }
    
}


除了上面四种方法,事件监听机制还可以直接绑定到标签,在这里不做说明。

下面说说基于回调的时间处理。

  如果说时间监听机制是一种委托式的时间处理,那么回调机制就正好与它想法了,换句话说就是它的事件源和时间执行同为一体。Android为了实现这种机制为所有的gui组件都提供了时间处理的方法,下面来示范下基于回调的时间处理机制。

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);
        //这里返回为true可以让该事件簿向外扩散
        return true;
    }
}

  基于回调的事件处理帮我们省了好多的编程工作,而且看起来也比基于监听的时间处理更加美观。

  

原文地址:https://www.cnblogs.com/wq123/p/3468107.html