View 的四种 OnClick 方式

这篇具有很好参考价值的文章主要介绍了View 的四种 OnClick 方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、介绍View的OnClick

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

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

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

View 的四种 OnClick 方式

二、第一种OnClick的方式

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

View 的四种 OnClick 方式

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

首先呢,在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方法

View 的四种 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文件夹中,该项目后期会持续更新!

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

大家可以通过下面的 👇的链接获取我的微信号,添加我的微信,互相交流,互相进步!文章来源地址https://www.toymoban.com/news/detail-414063.html

到了这里,关于View 的四种 OnClick 方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CSS中的四种定位方式

    在CSS中定位有以下4种: 静态定位 - static 相对定位 - relative 绝对定位 - absolute 固定定位 - fixed 静态定位是css中的默认定位方式,也就是没有定位。在此定位方式中设置:top,bottom,left,right,z-index 这些属性都是无效的。 相对位置前的位置: 相对位置后的位置: 可以看到该

    2024年02月08日
    浏览(62)
  • gRpc的四种通信方式详细介绍

    🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐 🌊 《100天精通Golang(基础入门篇)》学会Golang语言

    2024年02月11日
    浏览(11)
  • C++文件读取的四种方式

    C++可以根据不同的目的来选取文件的读取方式,目前为止学习了C++中的四种文件读取方式。 C++文件读取的一般步骤: 1、包含头文件 #includefstream 2、创建流对象:ifstream ifs (这里的ifs是自己起的流对象名字) 3、打开文件:file.open(\\\"文件路径\\\",\\\"打开方式\\\"),打开文件后并判断文件是

    2024年02月11日
    浏览(13)
  • Java创建数组的四种方式

    1.使用默认值来初始化 语法: 数组元素类型 [] 数组名称 = new 数组元素类型 [数组长度] EG: int [] nums = new int [5]; //创建了一个类型为int,名字为nums ,长度为5的数组 2.先声明一个数组,再给值 语法: 数据元素类型 [] 数组名称; 数组名称 = new 数组元素类型[数组长度]; EG: int [] nums; num

    2024年02月09日
    浏览(23)
  • 单例模式的四种创建方式

    单例模式是日常开发中最常见的一种设计模式,常用来做为池对象,或者计数器之类的需要保证全局唯一的场景。 单例模式的目的是保证在整个程序中只存在一个对象实例,使用单例一个前提条件就是构造器私有化,不允许通过new 对象的方式。单例模式的实现主要方式有如

    2024年02月01日
    浏览(20)
  • python导入库的四种方式

    目录 前言 一、import 库名 二、import 库名 as 别名(变量名) 三、from 库名 import 方法名 四、from 库名 import* 库可以抽象的理解为一个工具包,而库里的方法可以理解为工具包里各式各样的工具,每个工具作用不同。 此文例子库名为pygame,也就是工具包的名字,例子方法为ini

    2024年02月05日
    浏览(12)
  • C#对象的四种比较方式

    1.ReferenceEquals(object o1, object o2): 静态方法: 比较两个对象的引用,引用相同返回true,否则返回false,同为null是返回true; ReferenceEquals进行值类型比较时总是返回false,因为两个值类型需要分别装箱到对象中,是不同的引用 ; 从名称中便可知它用来比较两者是否是相同的引

    2024年02月16日
    浏览(10)
  • SpringBoot导出Excel的四种方式

           近期接到了一个小需求,要将系统中的数据导出为Excel,且能将Excel数据导入到系统。对于大多数研发人员来说,这算是一个最基本的操作了。但是……我居然有点方!         好多年没有实操这种基础的功能了。我对于excel导入导出的印象还停留在才入行时的工作经

    2024年02月03日
    浏览(14)
  • 记录-实现深拷贝的四种方式

    深拷贝:在堆内存中重新开辟一个存储空间,完全克隆一个一模一样的对象 浅拷贝:不在堆内存中重新开辟空间,只复制栈内存中的引用地址。本质上两个对象(数组)依然指向同一块存储空间 使用递归的方式进行对象(数组)的深拷贝 奉上已封装的深拷贝函数👇 上方函

    2023年04月21日
    浏览(12)
  • TypeScript判断对象类型的四种方式

    一、typeof 二、 instanceof 三、 constructor 四、 Object.prototype.toString() 使用案例:  

    2024年02月13日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包