Android基础——通过activity和XML绑定实现按钮点击事件

在前两篇中分别介绍了如何使用内部类和匿名内部类去实现按钮点击,链接在下面:
使用内部类实现按钮点击事件
使用匿名内部类实现按钮点击事件

**今天我们了解下剩下两种常见的实现方式:

  1. 如何通过activity实现按钮点击事件
  2. 如何通过XML绑定按钮实现按钮点击事件**
    ========================================================================================================
    一:通过activity实现按钮点击事件
    废话不多讲,直接上JAVA代码
public class ButtonActivity extends AppCompatActivity implements View.OnClickListener {
    
    
    @Override
    public void onClick(View v) {
    
    
        Log.e("TGA","通过activity实现的按钮点击事件");
    }

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

        // 绑定Button 对象
        Button button = findViewById(R.id.btn4);
        button.setOnClickListener(this);
    }
}

=========================================================================================================
代码详解:

首先我们可以发现这种实现方式是不是就是在activity中实现了一个名叫OnClickListener的接口呀~ 然后去实现接口里面的onClick()的一个方法对吧?

 @Override
    public void onClick(View v) {
    
    
        Log.e("TGA","通过activity实现的按钮点击事件");
    }

那我们可以以想想之前的内部类实现点击事件和匿名内部类实现点击事件,他们从本质上说不就是实现了这个OnClickListener接口嘛~只不过内部类实现是创建一个内部类去实现接口,匿名内部类是在监听器里面去new一个接口对吧?,那我们既然想方设法的都是为了去实现了这个OnClickListener接口,那activity不就是一个现成的类嘛,我们当然可以去使用它直接去实现这个接口,然后只要监听器检测到按钮被点击就会去实现OnClickListener接口里面的方法onClick,我们还是老样子 在控制台打印个错误日志 :“通过activity实现的按钮点击事件” 如果出现了这句话就证明我们完成了这个实现方法!

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

我们首先给button去绑定一个id 让java知道我们点击的是哪个按钮。

 Button button = findViewById(R.id.btn4);  //绑定id

然后我们去给button添加一个监听器,当监听器监听到我们的按钮有点击动作则会执行“参数”对应对象的onClick()方法 。

button.setOnClickListener(this);

很好,知道了这一点我们就想想 这个接口是不是在我们当前activity中实现的?那我们是不是就可以在参数中传入activity的对象?当然可以啦~那我们需要new一个对象吗?需要吗?我诺大的java肯定不会让你这么辛苦滴,别忘啦!this这个关键字! this是不是就是代表的当前类对象? 那好我们就去把this传进去,这不就完成了嘛!
至此恭喜客官又完成了一个按钮点击事件的方法——通过activity实现按钮的点击事件

========================================================================================================
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:text="自定义内部类的方法实现的点击事件"/>
    <Button
        android:id="@+id/btn2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="自定义内部类的方法实现的点击事件2"/>
    <Button
        android:id="@+id/btn3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="匿名内部类的方法实现的点击事件"/>
    <Button
        android:id="@+id/btn4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="通过activity实现的点击事件"/>
    <Button
        android:id="@+id/btn5"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="myClick"
        android:text="在xml文件中绑定实现点击事件"/>
    <Button
        android:id="@+id/btn6"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="myClick"
        android:text="在xml文件绑定实现点击事件2"
        />

</LinearLayout>

我们看看效果:在这里插入图片描述
我们点击第四个按钮看看效果:
在这里插入图片描述
ok在控制台打印出来了我们的日志,完成

二、通过XML绑定实现按钮点击事件

我们再来看看如何通过XML绑定去实现按钮点击事件

这次我们首先看看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:text="自定义内部类的方法实现的点击事件"/>
    <Button
        android:id="@+id/btn2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="自定义内部类的方法实现的点击事件2"/>
    <Button
        android:id="@+id/btn3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="匿名内部类的方法实现的点击事件"/>
    <Button
        android:id="@+id/btn4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="通过activity实现的点击事件"/>
    <Button
        android:id="@+id/btn5"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="myClick"
        android:text="在xml文件中绑定实现点击事件"/>
    <Button
        android:id="@+id/btn6"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="myClick"
        android:text="在xml文件绑定实现点击事件2"
        />

</LinearLayout>

首先我们可以看在xml代码中通过xml文件绑定实现点击事件的按钮和其他的几个按钮进行对比,就可以发现它比其他按钮多了个一个语句:

 android:onClick="myClick"

这是干什么的呢?又有什么作用呢? 说白了就是当你点击这个按钮的时候他会实现一个叫做myClick的方法 ,那这个myClick的方法是什么呢? 相信你已经猜到了,是的,就是我们自己在activity中自己写的一个方法。先了解到这点,我们再来看看activity代码看下这个方法是何方神圣!
java代码:

public class ButtonActivity extends AppCompatActivity  {
    
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_button);
    }
    //在xml中定义的myClick方法
    public void myClick(View view){
    
    
        Log.e("TAG","通过xml绑定实现的点击事件");
    }
}

我们发现是不是除了这个myClick方法也没有监听器、没有绑定按钮id、没有对象创建、没有接口实现、没有内部类、匿名内部类,就仅仅是一个我们在xml中定义的myClick方法,来,再来仔细看看这个方法形式是不是挺像OnClickListener接口里面的onClick方法

OnClickListener接口里面的onClick方法

 @Override
    public void onClick(View v) {
    
    
        Log.e("","");
    }

我们自己创建的myClick方法:

public void myClick(View view){
    
    
        Log.e("","");
    }

有没有很相似,我们来看看这个xml中的方法是怎样的一个机制。
首先我们在xml中添加了onClick 这个作用就是 如果当前按钮有点击则执行activity中的 对应方法
这样是不是就不用了监听器、也不用去实现这个接口,实现接口的目的不就是为了去实现里面的onClick方法嘛~那我们给他定义一个方法让他去实现不就行了 他们都有这相同的参数类型View ,这样就可以替代了onClick方法,当我们去点击按钮就会去执行我们写的方法。
最后我们看看运行效果:
在这里插入图片描述

我们点击划线的按钮看看效果:
在这里插入图片描述
在控制台成功的输出了提示 这样通过XML绑定实现按钮点击事件也完成啦~
通过XML绑定实现按钮点击事件基本上就完了,我会在下一篇中谈谈如何在xml绑定按钮实现多个点击事件
当然点击事件的实现绝不止这四种,不过这四种挺常用的。

使用内部类实现按钮点击事件
使用匿名内部类实现按钮点击事件

========================================================================================================
最后谢谢客官坚持看完这篇技术含量不高,又啰嗦的一篇博客
如有不对,请大佬指出~谢谢啦!
最后共勉:成功的路上布满了荆棘坎坷,那些心酸和泪水只有我自己知道,但我知道坚持一定很酷!
完结撒花~~
预告:下一篇:如何使用XML按钮绑定实现多个点击事件以及这四种按钮点击事件的总结~

猜你喜欢

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