Android开发中onClick事件的几种实现,分析,对比
作者:黄少卿
一、实现环境
操作系统平台:Windows XP
开发IDE:MyEclipse 8.M
使用SDK版本:Android SDK 2.3.3(API 10)
手机模拟器环境: Battery Support && SD Card Support(90M) 其它设置默认。
二、程序功能
为了方便分析,我们这里设置一个TextView和一个Button,点击Button,TextView显示“你点击了Button”。
资源文件:strings.xml中,定义两个新的资源:
<string name="buttonName">点击我</string>
<string name="labelName">这里显示文本</string>
组件文件:main.xml中,加入一个Button和一个TextView:
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/labelName"
android:textAppearance="?android:attr/textAppearanceLarge" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/buttonName" />
三、程序界面展示
(因为功能一致,这里对功能介绍一笔带过,着重看第四部分)
运行程序,初始状态:
点击Button后,程序界面:
四、代码分析
要事先上述简单功能,涉及到一个onClick事件的出发,下面,列举三种实现方式。
方式一:在activity的onCreate()方法中,嵌入如下代码:
Button button = (Button)findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
TextView textview = (TextView)findViewById(R.id.textView1);
textview.setText("你点击了Button");
}
});
方式二:让acticity持有TextView,并且新建类Button_Listener实现接口OnClickListener,activity中的代码为:
public class TestOnClickActivity extends Activity {
private TextView textview;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button button = (Button)findViewById(R.id.button1);
this.textview = (TextView)findViewById(R.id.textView1);
button.setOnClickListener(new Button_Listener(this));
}
public TextView getTextview() {
return this.textview;
}
}
类Button_Listener的代码为:
class Button_Listener implements OnClickListener {
private TestOnClickActivity activity;
public Button_Listener(TestOnClickActivity activity) {
this.activity = activity;
}
@Override
public void onClick(View v) {
TextView textview = activity.getTextview();
textview.setText("你点击了Button");
}
}
方式三:在组件文件main.xml中,对Button加入:
android:onClick="onClick_Event"
在activity中加入以下代码:
public void onClick_Event(View view) {
TextView textview = (TextView)findViewById(R.id.textView1);
textview.setText("你点击了Button");
}
首先,不用我多说,大家也能想到我列举这三种实现方式的目的,即以前两种的臃肿来衬托最后一种方式的简介。下面我就这三种方式一一分析。
方式一:
在方式一种,程序首先根据Button的ID实例化Button,然后在Button上加入listener监听对象,并同时实现接口OnClickListener的onClick()方法。
这种方式的代码量不是很多,但是有一个弊病:违背了java语言中,面向对象思想中关于解耦合,模块化的思想。 代码将接口的实现全部堆叠在一对小小的括号内,代码较为臃肿,并且很让人费解。
方式二:
在方式二中,为了改正方式一的接口实现的不规范,特别重新建立了一个类:Button_Listener。
这种方式代码结构清晰,在为Button加入监听方法是,只需要new Button_Listener(this)即可。但同时,我们也能够发现,因为不属于类TestOnClickActivity,所以类Button_Listener必须通过持有TestOnClickActivity, 将其作为成员。并且,我们需要在TestOnClickActivity 中显示的加入TextView,并书写getTextview()方法,才能够实现我们的程序意图。
虽然代码的模块化,解耦化得到了一定程度上的实现,但换来的结果是代码更多,书写更加繁琐。
那么,在这种背景下,方式三显得格外亮眼。
方式三:
在方式三种,我们只需要在TestOnClickActivity 中增加一个成员函数onClick_Event(),并在组件文件中加入对其的使用描述即可。
代码结构简单,清晰,代码量也大大减少,并且通过xml文件的可配置性,增长了工程的可维护性,模块化进一步增强! 这也是我最为推崇的一种方式。
以上为个人对Android开发过程中一个onClick事件的个人看法,欢迎大家与我进行交流!
Android开发中onClick事件的几种实现,分析,对比相关推荐
- Android开发中保存数据的四种方法方法
本文来自:安卓航班网 在Android开发中我们会接触到四种数据存储方式,每种存储方式都各有不同:以下安卓航班分别列举了Android开发中的不同存储方式的特点. 一,Preferences Pref ...
- android中onclick事件失效,Android中OnClick事件的三种方法
//第一种方式 Button Btn1 = (Button)findViewById(R.id.button1);//获取按钮资源 Btn1.setOnClickListener(new Button ...
- Android开发中完全退出程序的三种方法
Android程序有很多Activity,比如说主窗口A,调用了子窗口B,在B中如何关闭整个Android应用程序呢? 这里给大家三种比较简单的方法实现. 首先要说明在B中直接使用finish(),接 ...
- android中资源文件的两种访问方式,在android开发中进行数据存储与访问的多种方式介绍...
在android开发中进行数据存储与访问的多种方式介绍 更新时间:2013年06月07日 16:24:23 作者: 很多时候我们的软件需要对处理后的数据进行存储或再次访问,Android为数据存储 ...
- Android开发中配置JDK环境的几种方式
文章目录 一.前言 二.IDE设置 三.环境变量 四.gradle中配置 五.参考链接 一.前言 在Android开发中,配置JDK环境有以下几种方式来是Android项目正常编译 - changin ...
- Android 开发中的多线程编程技术
此文章来自"Intel Software"应用开发 多线程这个令人生畏的"洪水猛兽",很多人谈起多线程都心存畏惧.在Android开发过程中,多线程真的很难吗? ...
- android开发模式,Android开发中无处不在的设计模式
Android开发中无处不在的设计模式――单例模式 Android开发中无处不在的设计模式――Builder模式 前面介绍了单例模式和Builder模式,有兴趣的见上面两个链接,这篇文章侧重介绍1下视 ...
- Android开发中常见的设计模式
对于开发人员来说,设计模式有时候就是一道坎,但是设计模式又非常有用,过了这道坎,它可以让你水平提高一个档次.而在android开发中,必要的了解一些设计模式又是非常有必要的.对于想系统的学习设计模式的 ...
- Android开发中的多线程编程技术
Android开发中的多线程编程技术 [IT168技术]多线程这个令人生畏的"洪水猛兽",很多人谈起多线程都心存畏惧.在Android开发过程中,多线程真的很难吗?多线程程序的&q ...
最新文章
- 全国大学生智能汽车竞赛浙江赛区选拔赛疫情防控工作预案
- Discuz7使用syntaxhighlighter_2.0.320实现代码高亮
- [不屈的复习] - 编辑工具IDE选取与Hello World
- Node.js 之 新手安装详解 及 npm 配置说明
- ubuntu异常关机,断电重启后进入紧急模式,挂载磁盘SSD失败了怎么办?(Failed mount on XXX)
- 转:怎样开始学习php代码审计?
- linux Tcpdump 抓包 win大小异常
- 企业风险定价中的Expected loss估计
- 频率主义(Frequentism)与贝叶斯主义(Bayesianism)的哲学辨异与实践(Python仿真)
- 递归大总结之台阶问题
- 金蝶系统怎么清理服务器,“破坏王”教你如何彻底卸载金蝶kis专业版
- 电脑无法启动显示计算机comt,电脑开机显示press any key to restart进不了系统怎么办?...
- 计算机word2003界面,Word2003工作界面简介
- widows 句柄HINSTANCE
- wan口有流量但电脑上不了网_路由器wan口流量_双WAN口路由器配置(WAN口设置/WAN口在线检测/流量均衡控制)_路由器检测不到wan...
- python我国有13亿人口、假定按人口年增长0.8%计算_2000年世界人口50亿.按年增长率8%0计算.多少年后.世界人口超过100亿.请设计出一个算法.并画出程序框图....
- 计算机的常见故障处理实验报告,实训13 微机常见故障处理实训报告.doc
- 【破解利器】反汇编工具 and 反编译(Decompilers)
- 【Java用法】@NotEmpty、@NotBlank、@NotNull注解的使用方法与区别
- 【替代XShell】WindTerm 工具 【免费】【开源】