View 的四种 OnClick 方式

一、介绍View的OnClick

嗨喽,大家好!今天呢,我跟大家聊一聊Android 的View 的点击事件onClick 。额,有点拗口(^_^) 。 看过我的文章的人可能会好奇,你怎么写Android的文章了啊?说起这啊,就是我的血泪史了,此处省略一万字....................

废话不多说,让我们代码走起,风里来,雨里去,唯有代码最慰我心!

说起onClick ,我们不得不介绍一下这个,onClick作为View的点击事件,很多Android的控件都会使用到它,像我们比较常见的Button,ImageView,TextView等,这些控件都是继承于View ,所以他们都是使用这个方式的,也就是OnClick事件。

二、第一种OnClick的方式

这种方式可能是比较古老,以至于当我使用它时,android studio 2021.2.1 提示我这是弃用的方法,最后别使用它。当然你使用它也是可以的,编辑器只是建议你,主动权还在于你的。

 本来呢,我也是不知道这个方式的,是在看一个比较老的项目,当时找了很久都没发现点击事件是怎么触发的,调用了什么函数,后面才发现这个窍门。下面呢我们看一下这种方式是怎么做的。

首先呢,在xml文件中声明Button 的点击事件触发调用的函数的btn1OnClick,当然我们需要加入一个很重要的参数  tools:ignore="OnClick"  ,这个就是告诉编辑器点击按钮时会触发调用函数。嗯!大概是这样吧。

<Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="btn1OnClick"
        android:text="按钮1"
        tools:ignore="OnClick" />

写好xml后,我们只需要在Activity中,写一个 btn1OnClick 函数,这个函数呢,你可以写点击触发时的一些处理。

public void btn1OnClick(View view) {
      Toast.makeText(MainActivity.this,
                "我是按钮1点击的触发的事件",Toast.LENGTH_LONG).show()
 }

以上就是第一种 onClick的方式,简单吧,下面我们继续看下一种。、

三、第二种 onClick的方式

下面我们换一个控件,改用ImageVIew ,xml 的代码如下,在这个代码中最主要是声明一下这个控件的id ,也就是第一行的 android:id="@+id/btn2"

<ImageView
        android:id="@+id/btn2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/ic_launcher"/>

在activity中,我们先申明变量,然后在onCreate函数中根据 id 从布局中找到ImageView这个对象,最后使用匿名函数,创建一个对控件的点击事件的监听函数,通过监听事件然后触发onClick。在onClick函数中去写触发事件的处理。

private ImageView btn2; // 声明变量

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

        btn2 = findViewById(R.id.btn2); // 根据id找到布局中的ImageVIew
 
        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this,
                        "我是按钮2点击的触发的事件",Toast.LENGTH_LONG).show();
            }
        });
}

四、第三种 onClick的方式

这种方式呢,跟第二种很类似,就是将匿名函数改成 lambda 表达式,这就是Java语法的灵活运用。学习过的就知道这是怎么回事了。这里就不作过多的解释。(其实,我也不知道咋解释,就那样吧。)

 btn3 = findViewById(R.id.btn3);
 btn3.setOnClickListener(view -> {
        Toast.makeText(MainActivity.this,
                    "我是按钮2点击的触发的事件",Toast.LENGTH_LONG).show();
});

五、第四种 onClick的方式

1、xml中

这一次呢,我们换成用TextView控件,在xml中如下面代码所示。

<TextView
        android:id="@+id/btn4"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:gravity="center"
        android:text="按钮4"/>

2、Activity中继承 View.OnClickListener

在Activity中,需要继承 View.OnClickListener ,如下图所示, 继承了该类就需要实现该类的onClick方法

 3、监听控件

先声明一个 TextVIew 的变量,在布局中根据id找到该控件的对象,然后 setOnClickListener(this)设置监听该控件

    private TextView btn4;

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

        ........

        btn4 = findViewById(R.id.btn4);
        btn4.setOnClickListener(this);
    }

4、onClick回调函数中实现具体操作

下面的代码就是继承 View.OnClickListener 时,实现的onClick方法,在这个方法中,通过 switch 判断点击的是哪个按钮,例如在这个案例中,点击的是btn4,所以当  case R.id.btn4 时,我们在这里面写具体的实现操作。

 @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.btn4:{
                Toast.makeText(MainActivity.this,
                        "我是按钮1点击的触发的事件",Toast.LENGTH_LONG).show();
            }
        }
    }

六、总结

上面的四种 onClick 方法中,我们进行一下对比:

  • 第一种方法就很明显了,官方已经不推荐这种方法了,我们了解一下,可能会遇到很老的项目是这样写的,能看懂就行。
  • 第二种方法呢,使用的是匿名函数,当控件少的时候还好,代码不会很繁杂。当很多控件需要监听时,代码量就会特别大,而且代码条理不清晰,会比较混乱。
  • 第三种方法的话,使用lanbda表达式替换了匿名函数,从代码量来看会减少很多,但是同样的,当很多控件需要监听时,代码的条理性不够清晰,代码结构混乱。
  • 第四种方法是比较推荐的,我们也比较常用这种方式,这种结构会特别清晰,当我们看xml布局时,可以从控件的id ,很快的从Activity 中找到它的点击事件的代码。

代码已上传至 gitee : AndroidProject: Android 项目 (gitee.com)

 在该项目的 OnClickDemo文件夹中,该项目后期会持续更新!

好啦,这篇文章写到这里就结束了,预知后文如何,请看我下篇文章,感谢您的观看!

大家可以通过下面的 👇的链接获取我的微信号,添加我的微信,互相交流,互相进步!

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zpeien

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值