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;
        }
    }

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

      

  • 相关阅读:
    HDU 3572 Task Schedule(拆点+最大流dinic)
    POJ 1236 Network of Schools(Tarjan缩点)
    HDU 3605 Escape(状压+最大流)
    HDU 1166 敌兵布阵(分块)
    Leetcode 223 Rectangle Area
    Leetcode 219 Contains Duplicate II STL
    Leetcode 36 Valid Sudoku
    Leetcode 88 Merge Sorted Array STL
    Leetcode 160 Intersection of Two Linked Lists 单向链表
    Leetcode 111 Minimum Depth of Binary Tree 二叉树
  • 原文地址:https://www.cnblogs.com/wq123/p/3468107.html
Copyright © 2011-2022 走看看