您的位置:首页 > 其它

关于setOnClickListenter()

2011-02-19 23:39 344 查看
下面是一段非常常见的代码,以往只是照着书上抄,从语意上读顺了就完事了,没有从语法的角度来揉碎了细读:

public class MyActivity extends Activity {
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);

setContentView(R.layout.content_layout_id);

final Button button = (Button) findViewById(R.id.button_id);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
}
});
}
}
简单地写一下几个要点吧,首先setOnClickListener()函数是Button类继承于View类,去View查看该函数原型可知,它需要一个一个接口的实例作为参数(但是注释是说注册一个回调函数,回调函数在Java的本质是接口的实例吗?):

void setOnClickListener(View.OnClickListener l) // Register a callback to be invoked when this view is clicked.

首先有一个问题,参数I的原型是View.OnClickListener,这个看起来像一个函数的东西其实是View类的嵌套接口;其次,上面的代码中并没像原型中那样去new一个接口的实例I,然后I只在setOnClickListener()作为参数使用一次,这样太浪费了——于是这里使用了一个匿名类的概念,直接new了一个View.OnClickListener()的实例就拿去当参数,但这个实例并没有给它起名,所以叫匿名类(其实是匿名接口)。

最后就比较简单了,这个匿名的接口实例覆写了onClick()函数,这里面才真正定义了按钮按下时的动作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: