Android开发-之监听button点击事件

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

  实现button点击事件的监听方法有不少种,这里总结了经常使用的四种方法:html

  一、匿名内部类android

  二、外部类(独立类)ide

  三、实现OnClickListener接口性能

  四、添加XML属性this

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

 

2、具体实现

  一、匿名内部类:

  在Android开发中咱们会常常看到各类匿名内部类的使用,那么在实现button点击事件的时候也能够用匿名内部类。设计

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

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

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

  可是也有不足的地方: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、运行结果

 

 

  二、独立类(外部类):

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

  这样写的好处是: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、运行效果

 

 

 

  三、实现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、运行效果

 

 

 

  四、添加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、运行结果:

 

 

 

3、总结:

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

    1)绑定button按钮

    2)监听button事件

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

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

  三、Android开发中有不少按钮,可是监听的方法经常使用的都是这几种,因此可以触类旁通,这也是为何写这个的缘由

  四、Toast是Android中一个实现的效果,是否是常常看到这个效果呢?在写监听的时候顺便也把Toast一块儿学了,一箭双雕哈哈哈!!

 

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

相关文章
相关标签/搜索