平时做项目或学习中,经常编写控件的响应事件,大致有三种方式来实现,如下:
1. 匿名内部类的形式,据说好像这样写显得编写代码很NB,很多人推荐这种方式,不过我不这么认为,该不懂还是不懂,又显得代码臃肿,不推荐。
2. 内部类的形式,不推荐。
3. 实现接口的方式,推荐。
下面是3种方式的实现demo:
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
/**
* 控件响应的三种实现方式
* 以button的Onclick事件为例说明
* */
public class RespondWidgetActivity extends Activity implements OnClickListener{
//代表匿名内部类的button
private Button btn_response_anonyous = null;
//代表内部类的button
private Button btn_response_innerclass = null;
//代表实现接口的button
private Button btn_response_interface = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//加载显示view
setContentView(R.layout.activity_respond);
//初始化控件信息
initView();
}
/**
* 初始化控件信息
* */
private void initView(){
/** 匿名内部类的方式 */
btn_response_anonyous = (Button)findViewById(R.id.btn_response_anonymous);
btn_response_anonyous.setOnClickListener(new OnClickListener() {//匿名内部类
@Override
public void onClick(View v) {
Toast.makeText(RespondWidgetActivity.this, "这是匿名内部类的实现方式!", Toast.LENGTH_LONG).show();
}
});
/** 私有内部类的方式 **/
btn_response_innerclass = (Button)findViewById(R.id.btn_response_innerclass);
btn_response_innerclass.setOnClickListener(new onclick_innerclass());
/** 实现接口的方式 推荐**/
btn_response_interface = (Button)findViewById(R.id.btn_response_interface);
btn_response_interface.setOnClickListener(this);
}
/**
* 内部类,实现 OnClickListener接口
**/
private class onclick_innerclass implements OnClickListener{
@Override
public void onClick(View v) {
Toast.makeText(RespondWidgetActivity.this, "这是私有内部类的实现方式!", Toast.LENGTH_LONG).show();
}
}
/**
* 实现OnClickListener接口
*/
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.btn_response_interface:{
Toast.makeText(RespondWidgetActivity.this, "这是采用实现接口的方式!", Toast.LENGTH_LONG).show();
break;
}
default:
break;
}
}
}
备注:留着备用。