一、介绍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文件夹中,该项目后期会持续更新!
好啦,这篇文章写到这里就结束了,预知后文如何,请看我下篇文章,感谢您的观看!文章来源:https://www.toymoban.com/news/detail-414063.html
大家可以通过下面的 👇的链接获取我的微信号,添加我的微信,互相交流,互相进步!文章来源地址https://www.toymoban.com/news/detail-414063.html
到了这里,关于View 的四种 OnClick 方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!