Android对监听事件的处理可以分为4种
第一种:内部类作为事件监听器类
内部类有两种:分别为匿名内部类和不匿名内部类,其中大部分事件监听类都是使用匿名内部类。
其中的好处有:1.可以在当前类中复用该监听器类
2.可以自由访问外部类的所有界面组件
代码
b1.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intet = new Intent(MainActivity.this,seekbar.class);
startActivity(intet);
//finish();
}
});
第二种:外部类作为事件监听器类
比较少见,其中优点为:
当某个事件监听器被多个GUI界面共享,且主要是完成某种业务逻辑的实现
其中确定为:
1.不利于提高程序的内聚性
2.不能自由访问创建GUI界面类的组件,编程不够简洁
定义外部类代码
public sd(){
}
public void onClick(View v) {
// TODO Auto-generated method stub
//定义处理
}
调用外部类
b1.setOnClickListener(new sd()});
第三种:Activity本身作为事件监听器
可以直接在Activity中定义事件处理方法
其中优点为:非常简洁
缺点为:
1.这种形式可能造成程序结构混乱。Activity的主要职责应该是完成界面初始化;但此时还需包含事件处理器方法,从而引起混乱
2.如果activity界面类需要实现监听器接口,让人感觉比较怪异。
代码为:
public class ActivityListener extends Activity implements OnClickListener {
EditText show;
Button bn;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
show = (EditText)findViewById(R.id.show);
bn = (Button)findViewById(R.id.bn);
bn.setOnClickListener(this);
}
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_listener, menu);
return true;
}
public void onClick(View v) {
// TODO Auto-generated method stub
show.setText("按钮被单击了!");
}
}
第四种:直接绑定到标签
在布局中要发送事件源中定义一个:
android:onClick=”clickHandler”
然后在该布局对应的Activity定义一个 void clickHandler(void source)方法