一个简单的安卓按钮点击事件案例带你了解java/Android事件处理的几种方式
处理事件
首先让我们回顾一下java中处理事件模式:
- 事件源: 能够产生事件的对象都可以成为事件源 .
- 监视器:事件源通过调用相应的方法将某个对象注册为自己的监视器。对于java,这个方法是:addXXXXListener(监视器);对于Android,这个方法是setXXXXListener(监视器)。
- 处理事件接口:监视器负责处理事件源发生的事件。监视器是一个对象,为了处理事件源发生的事件,监视器这个对象会自动调用接口中一个方法来处理事件。
如图所示:
事件描述
很简单,在安卓模拟器界面上点击按钮,TextView的内容由”这里是TextView”变成”按钮被点击!”。
事件监听的五种方法
- 自身类,也就是MainActivity实现OnClickListener接口。
- 外部类,这里使用 BtnEventListener 继承OnClickListener接口。
- 内部类
- 匿名内部类
- Lambda表达式(本质上就是匿名类的另一种表达)
自身类
- 代码如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29package com.example.workhandling;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements View.OnClickListener { //自身类继承OnClickListener接口
Button myBtn1; //创建按钮对象
TextView textView;//创建文本视图对象
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.buttonevent);
//绑定相应ID 注意findViewById返回View对象,需要强制类型转换
myBtn1 = (Button) findViewById(R.id.btn1);
textView=(TextView)findViewById(R.id.textview);
//事件源添加监视器(该类本身)
myBtn1.setOnClickListener(this);
}
//注意 public 访问权限
public void onClick(View view){
textView.setText("Button被点击!");
}
}
外部类
1 | package com.example.workhandling; |
内部类
1 |
|
匿名内部类
1 |
|
Lambda表达式
Lambda表达式配置
参考博客:
- lambda表达式在Android中的妙用
- 在安卓中使用lambda报错(Lambda expressions are not supported at language level ‘7’)解决办法
① 在Android视图下的build.gradle(Project:xxx(你的项目名))添加配置代码:1
2
3
4
5
6
7
8
9android {//注意是在android这里面
....
compileOptions {
sourceCompatibility = 1.8
targetCompatibility = 1.8
sourceCompatibility JavaVersion.VERSION_1_8//添加代码
targetCompatibility JavaVersion.VERSION_1_8//添加代码
}
}
② 打开 File 点击Project structure,左侧选项栏选择SDK Location,在JDK location:选项框中选择找到1.8版本及以上的jdk路径.左侧选择栏选择Modules,在Source Compatibility和Target Compatibility中选择java1.8版本。重新构建项目。
Android中点击事件 使用 Lambda表达式
1 | package com.example.workhandling; |
总结
事件处理中应多使用匿名内部类和Lambda表达式!