在android 开发中,按钮响应点击事件有四种写法。下面依次介绍。
1. 匿名内部类
这种方式一般适用于自己写 demo 测试时使用,优点就是快速。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
Button button = (Button)findViewById(R.id.btn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//响应事件
}
});
}
2. 自定义事件监听类
这种方式和第一种差不多,唯一的区别就是将响应事件的代码放到一个自定义的监听类里面。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
Button button = (Button)findViewById(R.id.btn);
button.setOnClickListener(new MyListener());
}
//让自定义监听类去实现 View 的 OnClickListener 接口
private class MyListener implements View.OnClickListener {
@Override
public void onClick(View v) {
//响应事件
}
}
3. 由 Activity 实现 OnClickListener 接口
这种方式是在项目中应用最多的写法。因为这种写法可以减少代码量,尤其是在 Activity 上有多个点击事件的时候。
public class RegisterActivity extends Activity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
Button button = (Button)findViewById(R.id.btn);
button.setOnClickListener(this);
}
public void onClick(View v) {
//根据 id 来区分分别是哪个按钮的点击事件
switch (v.getId()){
case R.id.btn:
//响应事件
break;
default:
break;
}
}
}
4. 在布局文件中添加 onClick 属性
这种方式不用在 Activity 中声明组件对象就可以响应点击事件,虽然在看起来很轻便,但是在维护测试的时候,不容易找到 button 相对应的点击事件,所以不太推荐使用。
首先在 XML 布局文件中添加 onClick 属性
<Button
android:onClick="btnClick"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn"
android:id="@+id/btn" />
在 Activity 中实现方法
public void btnClick(View v){
//响应事件
}