Android基础——通过XML绑定实现多个点击事件&四种按钮点击事件的总结

我们前三篇文章分别了解到了如何实现按钮点击事件的四种常见方式:
1.使用内部类实现按钮点击事件
2.通过匿名内部类实现按钮点击事件
3.通过activity实现按钮点击事件
4.通过xml绑定实现按钮点击事件

传送门再此:↓↓↓↓↓↓↓↓↓↓↓↓↓↓
1.通过内部类实现按钮点击事件
2.通过匿名内部类实现按钮点击事件
3.通过activity实现按钮点击事件
4.通过xml绑定实现按钮点击事件

=============================================================================================
那么今天我们就来谈谈如何使用xml绑定按钮实现多个点击事件
我们试想一个场景,Android界面里面有着20多个按钮,现在要求这20个按钮都有着自己的点击事件,例如下面这张图:
在这里插入图片描述
我们都知道在xml中绑定按钮可以在xml按钮中添加一个onClick= “xxxx”的属性, 然后去activity中创建出这个xxx方法,然后就可以在这个创建的xxx方法里面实现我们想干的事情,如果我们点击了这个按钮,就会跑xxx这个方法里面的代码 。
具体参考我上一篇:
4.通过xml绑定实现按钮点击事件
你可能会说,这还不简单?我们给他每个按钮创建方法去执行代码不就行了? 是的,没问题这种方法当然可行。
不过我可不这样干,大哥~二十个按钮呐!,天了噜!哪一天项目经理心情不好了,说:小孟,咱们这个页面里面再加100个按钮,是不是我还得再创建100个方法?想想就可怕,等我创建完了也真的该卷铺盖走人了,那要怎么办呢?怎样用一个方法实现多个按钮的点击事件呢?

废话不多说直接上代码:
XML代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".ButtonActivity">
    <Button
        android:id="@+id/btn1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="myClick"
        android:text="在xml文件中绑定实现点击事件1"/>
    <Button
        android:id="@+id/btn2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="myClick"
        android:text="在xml文件绑定实现点击事件2"
        />
    <Button
        android:id="@+id/btn3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="myClick"
        android:text="在xml文件中绑定实现点击事件3"/>
    <Button
        android:id="@+id/btn4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="myClick"
        android:text="在xml文件绑定实现点击事件4"
        />
        </LinearLayout>

我这里只写了四个按钮作为示例,要是真写上20个文章会变得好长好长,也没有啥意义,我们能说明问题就好没有必要较真啦~

我们可以看出,这里所有按钮的onClick 属性都指向了同一个方法——myClick方法 那么既然是同一个方法那就应该执行的是同一个点击事件呀,输出同一个代码呀~怎么实现多个点击事件呢?你是不是骗我们的呀!

客官莫着急~请跟着我一起往下扒拉扒拉。

java代码:

public class ButtonActivity extends AppCompatActivity  {
    
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_button);

    }
    public void myClick(View view){
    
    
        switch (view.getId()){
    
    
        // 实现每个按钮自己的点击事件
            case R.id.btn1:
                Log.e("TAG","通过xml绑定实现的点击事件1");
                break;
            case R.id.btn2:
                Log.e("TAG","通过xml绑定实现的点击事件2");
                break;
            case R.id.btn3:
                Log.e("TAG","通过xml绑定实现的点击事件3");
                break;
            case R.id.btn4:
                Log.e("TAG","通过xml绑定实现的点击事件4");
                break;
        }
    }
  }
}

相信你看到这里已经明白的七七八八了吧,不懂?没关系~咱们一句一句慢慢扒拉。

 android:onClick="myClick"

首先我们确定了在XML代码中,每个代码的onClick属性都指向了在activity中同一个方法myClick,那他是如何做到实现不同的点击事件呢?

我们接着看看这个myClick方法:

public void myClick(View view){
    
    
        switch (view.getId()){
    
    
        // 实现每个按钮自己的点击事件
            case R.id.btn1:
                Log.e("TAG","通过xml绑定实现的点击事件1");
                break;
            case R.id.btn2:
                Log.e("TAG","通过xml绑定实现的点击事件2");
                break;
            case R.id.btn3:
                Log.e("TAG","通过xml绑定实现的点击事件3");
                break;
            case R.id.btn4:
                Log.e("TAG","通过xml绑定实现的点击事件4");
                break;
        }
    }

不难看出我们是使用switch选择分支语句根据不同button的id去找到不通button自己的点击事件执行代码的,那么这个id是怎么获取到的呢?

需要我们在R里面去找吗?当然不用啦,我们要知道在Android中 Button是TextView的子类,而TextView是View的子类,所以就可以使用view.getID() 的一个方法获取到当前控件的id。

switch (view.getId()){
    
    

那我们的case 语句后面的id 就可以通过R.id.在xml中添加的id就可以获取到。

  case R.id.btn1:

之后就会运行我们当前按钮自己的代码。
之后会执行break 去跳出switch。
这样就实现了多个点击事件,那这样的话我们是不是也可以通过这种方法用在内部类,用在匿名内部类、用在activity实现的接口里?当然可以!当然实现方法绝不仅仅是这一种,这里只是给出一个思考的方向~更多的还是要靠客官自己啦!

好啦~通过xml绑定实现多个点击事件就先说到这里,以后要是还有遇到其他情况我会再来分享哒!

======================================================================================================

稍微缓口气我们总结下这四种按钮点击事件,前方高能!我们一起冲冲冲~

一、通过内部类实现按钮点击事件:

  1. 创建内部类实现OnClickListener接口 实现里面的onClick方法
  2. 创建内部类的对象
  3. 使用按钮id给按钮添加Button 对象
  4. 给Button对象添加监听器 setOnClickListener(xxx),参数传入内部类对象
    ================================================================
    二、通过匿名内部类实现按钮点击事件:
  5. 使用按钮id给按钮添加Button 对象
  6. 给Button对象添加监听器 setOnClickListener(xxx),参数传入一个匿名内部类
  7. 匿名内部类是一个接口的对象,并实现接口里面的onClick方法
    ================================================================
    三、通过Activity实现按钮点击事件:
  8. 在Activity中直接实现OnClickListener接口,实现里面的onClick方法
  9. 使用按钮id给按钮添加Button 对象
  10. 给Button对象添加监听器 setOnClickListener(this),参数传入this即可
    ================================================================
    四、通过xml绑定实现按钮的点击事件:
  11. 在xml文件中给代码添加onClick属性 属性的值为一个方法
  12. 在Activity中创建这个方法

================================================================
其实这四种方法有很多的共性,在前三种方法里面就是为了通过各种方法实现一个接口,这个接口里面有一个方法叫做onClick 当监听器监听到点击动作就会去执行这个onClick方法

最后一种通过xml绑定实现按钮的点击事件从本质上说也是这样,不过它实现的方法不再是我们的onClick方法而是我们在属性onClick中定义的方法名的方法,可以变相的理解下,在xml文件的onClick属性就相当于一个监听器+一个接口
其实在开发中没有孰优孰劣,我们根据不同的环境使用的方法也是不同的,我们能做的就是熟悉每一个方法,到时候根据需求去选择使用。

第一种 通过内部类实现的方法:
有一个好处就是可以进行方便的复用、封装性较好 缺点就是麻烦 而且占用内存较大,要new对象

第二种通过匿名内部类实现的方法:
好处就是代码更加规范,其中可以继承一个抽象类还可以实现一个接口。缺点就是没有构造方法,不能再次使用,如果要使用只能老老实实的重做一遍

第三种通过activity 实现的方法:
很方便,代码结构清晰,缺点也是优点吧,生命周期较长 ,我们可以根据这个特性去做很多事情

第四种通过xml绑定按钮实现的方法:
优点 简单,方便,并且不用去创建大量的对象,在activity中的代码量少。这个是一个很常用的方法,缺点嘛~暂时没有发现,如果有大佬知道的请指正。

Android的按钮点击事件的四种常用的实现方法学会了吗? 关于点击事件就先告一段落啦,当然实现方式绝不仅仅是这四种,但是这四种是最常用的。希望大家也好好练习使用一下。
最后客官辛苦啦~谢谢客官耐心看完我这么啰嗦的一篇文。
奇迹不过是努力的另一个名字。时间不会改变一切,能改变一切的人,只有我们自己。----共勉

完结撒花~

猜你喜欢

转载自blog.csdn.net/Mr_m_jia_bao/article/details/108630619