关于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()函数,这里面才真正定义了按钮按下时的动作。
- 关于setOnClickListenter()
- 关于
- 关于
- 关于++,--
- 关于#
- 关于。。。
- 关于
- 关于......
- 关于
- 关于
- 关于****
- 关于
- 关于!
- 关于++
- 关于
- 关于
- 关于$?
- 关于%
- [转]简述CMMI 2级的7个PA
- vc判断数据库中是否有表
- 对BS开发技术发展的一点理解(微软体系)
- jquery源码阅读知识储备(9)javascrpt中的闭包和Currying(待续)
- VC++中Socket编程的实现---【TCP服务器端】
- 关于setOnClickListenter()
- VC++中Socket编程的实现---【TCP客户端】
- Linux cpufreq 机制
- the process of developing a program
- ORA-01861: 文字与格式字符串不匹配
- oscache的用法
- OSCache入门教程
- Windows Phone 7 优秀开源项目概览
- 多样化实现Windows Phone 7本地数据库访问