1. 监听器的编写及绑定有三种方法:
1.1 基本方法,以一个按钮控件来举例,.xml布局文件中自定义按钮控件,其ID为mybut:
step1:
public void OnCreate(Bundle savedInstanceState){
super.OnCreate(savedInstanceState);
super.setContentView(R.layout.send_main);
this.mybut = (Button)super.findViewByid(R.id.mybut);
this.mybut.setOnClickListener(new myListener());
}
step2:
private class myListener implements OnClickListener{
@Override
public void onClick(View view){
...... // 自己添加点击处理程序
}
}
1.2 用匿名内部类的方法:
public void OnCreate(Bundle savedInstanceState){
super.OnCreate(savedInstanceState);
super.setContentView(R.layout.send_main);
this.mybut = (Button)super.findViewByid(R.id.mybut);
this.mybut.setOnClickListener(new view.OnClickListener(){
@Override
public void onClick(View view){
...... // 自己添加点击处理程序
}
);
}
1.3 多按钮控件监听器统一绑定方法:
step1:
public void OnCreate(Bundle savedInstanceState){
super.OnCreate(savedInstanceState);
super.setContentView(R.layout.send_main);
this.mybut1 = (Button)super.findViewByid(R.id.mybut1);
this.mybut2 = (Button)super.findViewByid(R.id.mybut2);
this.mybut3 = (Button)super.findViewByid(R.id.mybut3);
mybut1.setOnClickListener(this); //绑定第一个按钮
mybut2.setOnClickListener(this); //绑定第二个按钮
mybut3.setOnClickListener(this); //绑定第三个按钮
}
step2: 重构onClick函数
@Override
public void onClick(View view){
switch(view.getId()){
case R.id.mybut1:
...... //第一个按钮的处理程序
break;
case R.id.mybut2:
...... //第二个按钮的处理程序
break;
case R.id.mybut3:
...... //第三个按钮的处理程序
break;
}
}
上面是将多个控件注册在本地(this)的一个监听器上。也可以将多个控件注册在一个自定义的监听器上,如下图所示
2. 控件的动作监听器绑定可以不在OnCreate()方法中完成:
当有很多控件时,控件的监听器绑定都放在OnCreate()方法中,会造成程序结构冗长,可读性差。用在布局管理器中指定动作处理函数的方法,可以解决此问题。
2.1 在布局管理器(.xml)文件中定义控件时,添加其动作定义,如下:
<Button
android:id="@+id/connectBT_Btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onMyButtonClick"
android:text="@string/button_break"/>
onMyButtonClick即为点击该button的处理函数。
2.2 在主程序(.java)的类中添加该函数即可:
public class MainActivity extends ActionBarActivity {
@Override
OnCreate(){....}
@Override
OnStart(){....}
......
public void onMyButtonClick(View view){
if (view.getId() == R.id.connectBT_Btn) {
...... // 点击操作处理
}
// 其它控件的点击操作也可绑定到该函数,用view id区分即可
if (view.getId() == R.id.xxxxxx) {
...... // 其它控件点击操作处理
}
......
}
}