转载地址:http://blog.csdn.net/dickren123/article/details/7216975

相信很多像我一样的新手学习Android开发会遇到这个问题,通过这几天的归类和总结,将我的理解写在下面,欢迎大家一起前来讨论:

以按钮BUTTON的监听事件为例,以下的监听实现都是等价的:

1.使用接口继承按钮监听方法

 import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView; /* 这里接口继承的方法是隶属于按钮BUTTON的,因此前面导入的头文件只需有BUTTON即可 */
public class Hello_to_worldActivity extends Activity implements Button.OnClickListener {
/** Called when the activity is first created. */
private Button btn_say_hello;
private TextView hello_world; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn_say_hello = (Button) findViewById(R.id.bnt_SAY_HELLO_TO_WORLD);
hello_world = (TextView) findViewById(R.id.textView1);
btn_say_hello.setOnClickListener(this);// 由于该类继承了BUTTON的监听,
} // 因此设置监听的参数只需传本类的对象即可 public void onClick(View v) {
// TODO Auto-generated method stub
hello_world.setText("dickren123!");// 抽象接口的内部方法的实现
}
}

2.使用接口继承view类的监听方法

 import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;/* 导入的头文件需要有view类监听 */
import android.widget.Button;
import android.widget.TextView; public class Hello_to_worldActivity extends Activity implements OnClickListener {
/** Called when the activity is first created. */
private Button btn_say_hello;
private TextView hello_world; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn_say_hello = (Button) findViewById(R.id.bnt_SAY_HELLO_TO_WORLD);
hello_world = (TextView) findViewById(R.id.textView1);
btn_say_hello.setOnClickListener(this);// 由于该类继承了view的监听,
} // 因此设置监听的参数只需传本类的对象即可 public void onClick(View v) {
// TODO Auto-generated method stub
hello_world.setText("dickren123!");// 抽象接口的内部方法的实现
}
}

3.不用接口,在类内部直接实现监听

 import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView; public class Hello_to_worldActivity extends Activity {
/** Called when the activity is first created. */
private Button btn_say_hello;
private TextView hello_world; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn_say_hello = (Button) findViewById(R.id.bnt_SAY_HELLO_TO_WORLD);
hello_world = (TextView) findViewById(R.id.textView1);
btn_say_hello.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) { // 使用匿名的Button实例
// TODO Auto-generated method stub
hello_world.setText("dickren123!");// 抽象接口的内部方法的实现
}
});
}
}

4、如果不使用匿名实例,也可以定义一个具体的实例

 import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button; public class Hello_to_worldActivity extends Activity {
/** Called when the activity is first created. */
private Button btn_say_hello; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn_say_hello = (Button) findViewById(R.id.bnt_SAY_HELLO_TO_WORLD);
btn_listener bl = new btn_listener();
btn_say_hello.setOnClickListener(bl); // bl是类btn_listener的实例,而btn_listener为监听方法的接口
} // 因此设置监听的参数只需传本类的对象即可
} class btn_listener implements Button.OnClickListener {
public void onClick(View v) {
// TODO Auto-generated method stub }
}

onclicklistener到底怎么用?的更多相关文章

  1. 拨开迷雾,找回自我:DDD 应对具体业务场景,Domain Model 到底如何设计?

    写在前面 除了博文内容之外,和 netfocus 兄的讨论,也可以让你学到很多(至少我是这样),不要错过哦. 阅读目录: 迷雾森林 找回自我 开源地址 后记 毫无疑问,领域驱动设计的核心是领域模型,领 ...

  2. Js new到底发生了什么

    在Js中,我们使用了new关键字来进行实例化 那么在这个new的过程中到底发生了什么? 关于构造函数的return 正常来讲构造函数中是不用写return语句的,因为它会默认返回新创建的对象. 但是, ...

  3. 电信计费业务:预后融合OCS到底应该实扣还是虚扣?

    引入OCS的初衷之一是为了让计费系统能够参与到用户的通讯控制中来,也就是所谓的实时信控.用户在没有余额时,通讯就会被停止,不会造成"天价欠费 ",一方面保障用户的利益,一方面也保障 ...

  4. 港真,到底应该选择OA还是BPM?

    越来越多企业意识到流程管理的重要性,但是,选择OA还是BPM,却让他们产生了选择困难症. 一方面,企业皆注重流程的高效运转,最好内外部的业务都能用一个系统来解决.所有流程一天就能上线什么的,那就更好啦 ...

  5. 四、可空类型Nullable<T>到底是什么鬼

    值类型为什么不可以为空 首先我们都知道引用类型默认值都是null,而值类型的默认值都有非null. 为什么引用类型可以为空?因为引用类型变量都是保存一个对象的地址引用(就像一个url对应一个页面),而 ...

  6. 在开发中到底要不要用var?

    var是.net的一个语法糖,在Resharper中推荐都使用这个关键字,平常我也是经常用:但是在跟其他程序员推广使用时,他的一些考虑引发了我的深思,到底该不该使用这个关键字呢? 我使用的理由 我使用 ...

  7. 阿里的weex框架到底是什么

    title: 阿里的weex框架到底是什么 date: 2016-09-27 10:22:34 tags: vue, weex category: 技术总结 --- weex 工作原理 首先看下官方的 ...

  8. 全局变量 HInstance 到底是在什么时候赋值的?

    在学习 资源文件 和 钩子函数 时, 经常用到当前模块句柄(HInstance)这个全局变量. 今天特别想知道, 它到底是在什么时候给赋值的. 输入 HInstance; "Ctrl+鼠标& ...

  9. The method setPositiveButton(int, DialogInterface.OnClickListener) in the type AlertDialog.Builder is not applicable for the arguments

    The method setPositiveButton(int, DialogInterface.OnClickListener) in the type AlertDialog.Builder i ...

随机推荐

  1. 为什么要用VisualSVN Server,而不用Subversion?

    为什么要用VisualSVN Server,而不用Subversion? [SVN 服务器的选择] - 摘自网络 http://www.cnblogs.com/haoliansheng/archive ...

  2. Android框架

    http://blog.163.com/vicent_zxb/blog/static/1858861312011488262665/ (一)Android系统框架详解 Android采用分层的架构,分 ...

  3. 黄聪:PHP使用Simple_HTML_DOM遍历、过滤及保留指定属性

    <? /* * 参考资料: * http://www.phpddt.com/manual/simplehtmldom_1_5/manual_api.htm * http://www.phpddt ...

  4. 6. redis持久化,认证

    一. RDB 快照持久化 (默认) rdb机制,在满足redis.conf中配置的持久化策略后, 自动持久化数据, 默认存储在dump.rdb文件中 策略 : save 900 1 : 900秒内,一 ...

  5. (C++) 基本面试题(整理)

    1.new.delete.malloc.free关系 new/delete是C++的运算符.new 调用构造函数用于动态申请内存,delete调用对象的析构函数,用于释放内存. malloc与free ...

  6. PLSQL_Oracle面试整理(汇总)

    2014-08-16 Created By BaoXinjian

  7. 使用LKDBHelper 插入相同id时候应该是更新数据而不是插入新的数据

    要实现使用LKDBHelp 插入相同id时候应该是更新数据而不是插入新的数据 例如#import "JSONModel.h" @interface InfoModel : JSON ...

  8. CentOS7 备忘录

    //安装CentOS7 1.用LinuxLive USB Creator,LiveUSB Creator设置U盘安装不成功,UltraISO可以. 2.旧电脑(x8le)安装时报"/dev/ ...

  9. 按列 sort 排序 Linux 如何查看当前占用CPU或内存最多的K个进程

    用法:sort [选项]... [文件]...Write sorted concatenation of all FILE(s) to standard output. 长选项必须用的参数在使用短选项 ...

  10. Java错误:很奇怪的错误。。。

    刚刚调试java web中出现了一个很奇怪的现象,前端有一个页面通过ajax调用后台的servlet,当我把后台的servlet代码修改后(将返回值由a修改为b),前端页面仍然获取的是a.调试跟踪se ...