zoukankan      html  css  js  c++  java
  • Android开发-之监听button点击事件

    一、实现button点击事件的方法

      实现button点击事件的监听方法有很多种,这里总结了常用的四种方法:

      1、匿名内部类

      2、外部类(独立类)

      3、实现OnClickListener接口

      4、添加XML属性

      每一种方法都有它的优点也有它的不足,那么接下来就来详细的讲解这四个实现方法

    二、具体实现

      1、匿名内部类:

      在Android开发中我们会经常看到各种匿名内部类的使用,那么在实现button点击事件的时候也可以用匿名内部类。

      这样使用的好处是:1)不需要重新写一个类,直接在new的时候去实现想实现的方法,很方便。

               2)当别的地方都用不到这个方法的时候使用匿名内部类

               3)高内聚,高内聚是设计原则之一,匿名内部类的特性之一就是拥有高内聚。

      但是也有不足的地方:1)当别的地方也需要同样的一个方法时还要重新再在那个地方写一次匿名内部类,这样使得代码的冗余性很高。

                2)不方便后期的维护

      a、添加一个按钮

    <Button
            android:id="@+id/button1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/textView1"
            android:layout_marginTop="20dp"
            android:text="方法一:匿名内部类" />

      

      b、回到MainActivity中实现

    public class MainActivity extends Activity{
        
        private Button btn1;
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            /*
             * 方法一:使用匿名内部类实现button按钮的
             */
            //绑定button按钮
            btn1 = (Button) findViewById(R.id.button1);
            
            //监听button事件
            btn1.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast tot = Toast.makeText(
                            MainActivity.this,
                            "匿名内部类实现button点击事件",
                            Toast.LENGTH_LONG);
                    tot.show();
                }
            });
        }
    }

      c、运行结果

      2、独立类(外部类):

      重新写一个独立的类来实现业务逻辑或是想要的效果

      这样写的好处是:1)一定情况下可以方便维护

              2)可以降低代码的冗余性,可以同时使用到多个地方

      不足的地方是:1)当只使用一次时浪费资源,程序的性能不高

             2)当有很多个方法时代码的可读性不高,此时不方便维护

      a、添加一个button按钮

     <Button
            android:id="@+id/button2"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignRight="@+id/button1"
            android:layout_below="@+id/button1"
            android:layout_marginTop="20dp"
            android:text="方法二:独立类" />

      b、回到MainActivity中实现,外部类中需要实现OnClickListener接口,并重写其中的方法 

    public class MainActivity extends Activity {
        
        private Button btn2;
    
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            /*
             * 方法二:独立类实现button实现
             */
            btn2 = (Button) findViewById(R.id.button2);
            btn2.setOnClickListener(new btn2Click(this));
            
            
        }
    }
    public class btn2Click implements OnClickListener {
    
        private Context context;
        
        //重载btn2Click方法
        public btn2Click(Context ct){
            this.context=ct;
        }
        
        @Override
        public void onClick(View v) {
            Toast tot = Toast.makeText(
                    context,
                    "独立类实现button点击事件",
                    Toast.LENGTH_LONG);
            tot.show();    
        }
    
    }

      c、运行效果

      3、实现OnClickListener接口:

      与独立类实现的原理是一样的,优点和缺陷也是大径相同的,实现OnClickListener接口的时候实现它其中的onClick方法

      a、添加button按钮

    <Button
            android:id="@+id/button3"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignRight="@+id/button2"
            android:layout_below="@+id/button2"
            android:layout_marginTop="20dp"
            android:text="方法三:实现接口" />

      b、回到MainActivity中实现

    public class MainActivity extends Activity implements OnClickListener {
    
        private Button btn3;
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            /*
             * 方法三:实现OnClickListener接口
             */
            btn3 = (Button) findViewById(R.id.button3);
            btn3.setOnClickListener(this);
            
        }
    
        //实现OnClickListener接口中的方法
        @Override
        public void onClick(View v) {
            Toast tot = Toast.makeText(
                    MainActivity.this,
                    "接口OnClickListener实现button点击事件",
                    Toast.LENGTH_LONG);
            tot.show();
            
        }
    }

      c、运行效果

      4、添加XML属性:

      我们可以给XML添加一个onClick属性来实现点击事件的监控

      这样的好处是:更加便捷,代码量能够减少

      但是不足的地方是:每一次维护的时候都要去XML里面改源码,是不是很不好维护很麻烦呢?

      a、添加一个button按钮,并添加onClick按钮

    <Button
            android:id="@+id/button4"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/button3"
            android:layout_below="@+id/button3"
            android:layout_marginTop="20dp"
            android:onClick="btn4Click"
            android:text="方法四:添加xml属性" />

      b、回到MainActivity中实现onClick按钮

     /*
         * 方法四:添加XML属性
         */
        public void btn4Click(View v){
            Toast tot = Toast.makeText(
                    MainActivity.this,
                    "添加XML标签实现button点击事件",
                    Toast.LENGTH_LONG);
            tot.show();
        }

      c、运行结果:

    三、总结:

      1、在实现监听的时候都是需要两步走:

        1)绑定button按钮

        2)监听button事件

      1、具体使用什么方法去实现button按钮点击事件的监听要看具体的需求,都各有各的好处和不足。如果只使用一次则推荐使用内部类的方法;如果多次使用则使用外部类的方法;实现接口的方法可以在原本的类中实现;但是在XML里面添加属性的方法时不推荐的,毕竟很不好去维护。

      2、内部类的使用在Android开发中是经常用到的,所以非常的重要,这里附上我之前总结的博客园博文链接:http://www.cnblogs.com/xiao-chuan/p/6014752.html

      3、Android开发中有很多按钮,但是监听的方法常用的都是这几种,所以能够举一反三,这也是为什么写这个的原因

      4、Toast是Android中一个实现的效果,是不是经常看到这个效果呢?在写监听的时候顺便也把Toast一起学了,一举两得哈哈哈!!

    PS:看似零零散散的知识点,但所有的知识点都是一条连线的,任何行业的知识点都是如此,就好比先有了数字才出现算数,先出现了英文字母才有了单词一样。。。

  • 相关阅读:
    Leetcode Spiral Matrix
    Leetcode Sqrt(x)
    Leetcode Pow(x,n)
    Leetcode Rotate Image
    Leetcode Multiply Strings
    Leetcode Length of Last Word
    Topcoder SRM 626 DIV2 SumOfPower
    Topcoder SRM 626 DIV2 FixedDiceGameDiv2
    Leetcode Largest Rectangle in Histogram
    Leetcode Set Matrix Zeroes
  • 原文地址:https://www.cnblogs.com/xiao-chuan/p/6074075.html
Copyright © 2011-2022 走看看