转载地址: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. 重新定位svn地址的方法(windows和linux),svn switch(sw)的帮助信息

    今天公司的路由器出现问题,服务器的IP地址也跟着变了,但是原来的svn已经设置好了,现在需要更换地址 查询原地址的方法: root@jack-desktop:codes# svn info 路径: . ...

  2. 最简单的ioc容器代码(低仿Spring )

    Spring 的一大核心就是IOC,控制反转(依赖注入). 对象交由容器去控制,降低耦合性. Spring 的ioc实现原理其实很简单,容器启动后读取并解析配置文件,根据配置文件中<bean&g ...

  3. c++builder6.0 mdi窗体+自定义子窗体

  4. DBA_Oracle性能优化的基本方法概述(方法论)

    2014-12-18 Created By BaoXinjian

  5. sql异常

    表结构 Id int UncheckedTitle nvarchar(50) CheckedValue nvarchar(1000) CheckedRemark nvarchar(1000) Chec ...

  6. sql server异地备份数据库

    --注意:异地备份数据库,需要先开启备份文件夹的网络共享,数据库选择master --打开允许执行xp_cmdshell exec master..xp_cmdshell 'net use \\192 ...

  7. struts2标签获取parameter,request,session,application中的值

    http://localhost:8080/demo/index.jsp?flag=kkkk <s:property value="#parameters.flag" /&g ...

  8. 采访ServiceStack的项目领导Demis Bellot——第1部分(转)

    ServiceStack是一个开源的.支持.NET与Mono平台的REST Web Services框架.InfoQ有幸与Demis Bellot深入地讨论了这个项目.在这篇两部分报道的第1部分中,我 ...

  9. [ActionScript 3.0] AS3 绘制立方体

    package { import flash.display.Sprite; import flash.events.Event; import flash.geom.Vector3D; import ...

  10. position中多次用到了relative和absolute,能不能具体介绍一下这两者的区别?

    position中多次用到了relative和absolute,能不能具体介绍一下这两者的区别? 一个是相对定位,一个是绝对定位. absolute生成绝对定位的元素,相对于 static 定位以外的 ...