持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第15天,点击查看活动详情
上一篇文章中,我们介绍了Button控件的基本使用方法,以及利用onClick属性的方式来添加点击事件的方法。我们说了这种方式已经被淘汰,并且系统也推荐我们用 View.setOnClickListener 的方式来添加点击事件,今天我们来看一下 View.setOnClickListener 的方式怎么来添加点击事件。
从setOnClickListener这个的命名方式上,我们可以看出来这是一个对点击事件的监听行为(当某空间发生了指定的行为,监听器就会触发并且去执行相对的代码)。
常见的事件监听器:
- setOnClickListener 点击监听器,按钮被按住少于500毫秒的时候触发
- setOnLongClickListener 长按监听器,按钮被按住超过于500毫秒的时候触发
说明:我们还沿用上一个示例,新增一个按钮设定 id 为 bt_2:点击按钮,下方TextView内容显示我们点击了多少次按钮。
步骤:
- 首先用findViewById 获取到 bt_2 ,Button 控件
- 在onCreate 中,给bt_2 添加监听器并写入显示点击次数的方法
代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_button_test);
tv_text1 = findViewById(R.id.tv_text1);
b_number = 0;
bt_2 = findViewById(R.id.bt_2);
bt_2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
b_number++;
tv_text1.setText("按钮被点击 "+ b_number +"次");
}
});
}
效果:
如果我们想在添加一个Button也实现记录点击次数的功能,很显然只需要在onCreate中按照以上方法,在创建一个监听器就可以。但是如果我们需要10个20个或者更多的Button实现同一个功能的时候怎么办呢。
首先我们来看一下setOnClickListener
我们发现setOnClickListener 实际上是需要一个View.OnClickListener的接口监听对象。
↓↓↓
再来看View.OnClickListener
OK知道其原理之后,我们可以实现一个类 MyOnClickListent,再次添加监听的时候就实例化MyOnClickListent这个类。
步骤:
- 首先用findViewById 获取到 bt_1,Button 控件
- 在onCreate 中,给bt_1 添加监听器实例化MyOnClickListent类并把 tv_text1 与 b_number 传递到其中。
- 创建MyOnClickListent类,声明 tv_text1 与 b_number 属性,并给其赋值。
- onClick实现显示点击次数的方法
代码:
protected void onCreate(Bundle savedInstanceState) {
bt_1 = findViewById(R.id.bt_1);
bt_1.setOnClickListener(new MyOnClickListent((TextView) tv_text1, (int) b_number));
}
static class MyOnClickListent implements View.OnClickListener{
//声明属性
private final TextView tv_text1;
private int b_number;
//用构造方法给属性赋值
public MyOnClickListent(TextView bt_1,int b_number) {
this.tv_text1 = bt_1;
this.b_number = b_number;
}
//实现效果
@Override
public void onClick(View v){
b_number++;
tv_text1.setText("按钮被点击 "+ b_number +"次");
}
}
如果在多个按钮我们想要区分哪一按钮被点击的时候,我们还可以这么写。
步骤:
- Activite实例让当前这个类来实现OnClickListener这个接口
- 在onClick实现显示点击次数的方法
- 利用getId()方法区分不同的按钮
public class ButtonTest extends AppCompatActivity implements View.OnClickListener {
@Override
rotected void onCreate(Bundle savedInstanceState) {
bt_3 = findViewById(R.id.bt_3);
bt_3.setOnClickListener((View.OnClickListener) this);
}
@Override
public void onClick(View v) {
if(v.getId() == R.id.bt_1){
//相应的操作
}else if(v.getId() == R.id.bt_2){
//相应的操作
}else if(v.getId() == R.id.bt_3){
//相应的操作
}
b_number++;
tv_text1.setText("按钮被点击 "+ b_number +"次");
}
}
那么Button 的 setOnClickListener监听器的使用方法我们就暂时介绍到这来,下一篇文章我们再来了解一下setOnLongClickListener监听器,以及Button的其他属性。