• 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"  ,这个就是告诉编辑器点击按钮时会触发调用函数。嗯!大概是这样吧。

    1. <Button
    2. android:id="@+id/btn1"
    3. android:layout_width="wrap_content"
    4. android:layout_height="wrap_content"
    5. android:onClick="btn1OnClick"
    6. android:text="按钮1"
    7. tools:ignore="OnClick" />

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

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

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

    三、第二种 onClick的方式

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

    1. <ImageView
    2. android:id="@+id/btn2"
    3. android:layout_width="wrap_content"
    4. android:layout_height="wrap_content"
    5. android:src="@mipmap/ic_launcher"/>

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

    1. private ImageView btn2; // 声明变量
    2. @Override
    3. protected void onCreate(Bundle savedInstanceState) {
    4. super.onCreate(savedInstanceState);
    5. setContentView(R.layout.activity_main);
    6. btn2 = findViewById(R.id.btn2); // 根据id找到布局中的ImageVIew
    7. btn2.setOnClickListener(new View.OnClickListener() {
    8. @Override
    9. public void onClick(View view) {
    10. Toast.makeText(MainActivity.this,
    11. "我是按钮2点击的触发的事件",Toast.LENGTH_LONG).show();
    12. }
    13. });
    14. }

    四、第三种 onClick的方式

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

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

    五、第四种 onClick的方式

    1、xml中

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

    1. <TextView
    2. android:id="@+id/btn4"
    3. android:layout_width="100dp"
    4. android:layout_height="100dp"
    5. android:gravity="center"
    6. android:text="按钮4"/>

    2、Activity中继承 View.OnClickListener

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

     3、监听控件

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

    1. private TextView btn4;
    2. @Override
    3. protected void onCreate(Bundle savedInstanceState) {
    4. super.onCreate(savedInstanceState);
    5. setContentView(R.layout.activity_main);
    6. ........
    7. btn4 = findViewById(R.id.btn4);
    8. btn4.setOnClickListener(this);
    9. }

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

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

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

    六、总结

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

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

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

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

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

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

  • 相关阅读:
    如何用手机号注册亚马逊买家账号
    在 C/C++ 中清除输入缓冲区
    Matplotlib 是一个广泛用于 Python 数据可视化的库
    argparse的用法
    FITC-PEG-MAL,荧光素聚乙二醇马来酰亚胺,FITC-PEG-Maleimidev
    Linux基本指令(上)
    Kotlin File readText readLines readBytes
    React中编写操作树形数据的自定义Hook
    通过电脑查看Wi-Fi密码的方法,提供三种方式
    亚马逊刷关键词软件——亚马逊鲲鹏系统
  • 原文地址:https://blog.csdn.net/qq_44920726/article/details/126456368