工作中的项目通常有多个人一起开发,而每个人都有每个人的代码风格,不注重代码规范通常是前人挖坑,后人采坑,降低项目开发效率及加大维护难度,这里分享几种安卓按钮点击事件监听的实现方式。
方式一:直接在Activity中实现View.OnClickListener接口,重写onClick方法,提供所有按钮监听事件入口。这是实际项目中最常用的方式,尤其在页面有多个按钮的情况下比较适用。
package com.example.myapp;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity implements View.OnClickListener {
private Button button1;
private Button button2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1 = findViewById(R.id.button1);
button2 = findViewById(R.id.button2);
//注册监听器
button1.setOnClickListener(this);
button2.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.button1:
onClickButton1(view);
break;
case R.id.button2:
onClickButton2(view);
break;
default:
break;
}
}
private void onClickButton1(View view) {
//处理逻辑
}
private void onClickButton2(View view) {
//处理逻辑
}
}
通常页面会有多可按钮,可以在OnClick方法中通过View.getId()获取到发生点击事件的按钮Id,再进行相应的处理;建议不要直接在OnClick方法中直接处理,因为多个按钮的处理逻辑写在同一个方法中,方法体较长,可读性降低。
方式二:按钮注册监听器时直接实现监听接口,即匿名内部类的方式实现。页面只有单个按钮时比较常用。
register_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(TextUtils.isEmpty(userName_et.getText().toString()) || TextUtils.isEmpty(pwd_et.getText().toString())) {
Toast.makeText(RegisterActivity.this, "用户名密码不能为空", Toast.LENGTH_LONG).show();
return;
}
//注册
}
});
熟悉函数式编程的话,可直接写lambda表达式,代码更加简洁。
方式三:自定义一个监听器,实现View.OnClickListener接口,这与方式一类似,方式一直接在Activity中实现View.OnClickListener接口,因此它本身就是一个监听器。这里要另外实现一个监听器类。
class MyListener implements View.OnClickListener{
@Override
public void onClick(View view) {
//处理逻辑
}
}
最后别忘了在Activity中注册自定义的监听器
register_btn.setOnClickListener(new MyListener());
方式四:在XMl布局文件中的OnClick属性直接注册Activity中的处理方法,Activity中的点击事件处理方法需要时public方法,底层会通过反射方式调用。这种方法不好维护,通常不好找按钮对应点击事件处理方法,不建议使用
XML布局文件:
<ImageButton
android:layout_marginTop="50dp"
android:layout_height="49dp"
android:layout_width="55dp"
android:layout_gravity="center"
android:onClick="activate"
/>
Activity中写相应的处理方法,访问权限是public:
public void activate(View v) {
Intent intentToActivate = new Intent();
intentToActivate.setClass(this, LoginActivity.class);
startActivity(intentToActivate);
}