zoukankan      html  css  js  c++  java
  • 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;
        }
    }

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

      

  • 相关阅读:
    联合省选 2020 题解
    [省选联考 2020 A 卷] 组合数问题
    【NOI2016】循环之美
    MySQL 之 json 数据操作
    使用Redis和定时实现延时消费
    事务,这次还有不清楚的吗,一次实战坑
    哨兵redis配置
    记录一次shell脚本的使用
    记录一次工作中的SQL优化,临时表和CountDownLatch
    JAVA流读取文件并保存数据
  • 原文地址:https://www.cnblogs.com/wq123/p/3468107.html
Copyright © 2011-2022 走看看