关于setOnClickListenter()

来源:互联网 发布:农行网银支持mac吗 编辑:程序博客网 时间:2024/06/05 05:40

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

 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()函数,这里面才真正定义了按钮按下时的动作。

原创粉丝点击