初学android时,总是对控件绑定监听器的机理一直不是很了解,读过几篇前辈的博客之后,有了一定的认识…..
1、什么是监听器?
1、监听器是个抽象类,它包含了一个事件触发时系统会去调用的函数
2、在子类中,根据您项目的需要重写这个函数
3、派生后的监听器需要绑定到按钮上,就像一个耳机可以发出声音,但您不去戴它,您是听不到它发出的声音的。一般的情况是这个按钮可能需要这个监听器,而另外一个按钮需要另外一个监听器,每个监听器各司其职,但功能相似时,也可以多个按钮共同绑定一个监听器。
4、各种控件,都有常用的事件,如点击按钮,拖动一个滚动条,切换一个ListView的选项等等,他的绑定监听器的函数命名规则是setOn****Listener
2、为什么要这么设计?
1、当用户(也可能系统)触发某个控件的某个事件后,往往要处理一些细节,但他们不具有通用性,例如您可能点击按钮后改变它的值,也可能希望点击按钮后弹出一个网页,或者点击按钮后关闭当前Activity。正由于结果可能太多样,设计者索性将实现完全留给Android开放者去实现。
2、监听器其实是一种回调:
它不需要您去执行On****Listener,而是系统触发后自动会去调用它,流程如下图:
3、监听器如何定制?
您可以使用自定义内部类继承监听器抽象类,并实现抽象方法。您也可以使用Java提供的抽象类的匿名实现:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn = (Button)findViewById(R.id.btnOK);
//绑定匿名的监听器,并执行您所要在点击按钮后执行的逻辑代码
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Toast.makeText(MyActivity.this, "点击了按钮", Toast.LENGTH_LONG).show();
}
});
}