作者:黄少卿

一、实现环境

操作系统平台: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事件的几种实现,分析,对比相关推荐

  1. Android开发中保存数据的四种方法方法

    本文来自:安卓航班网 在Android开发中我们会接触到四种数据存储方式,每种存储方式都各有不同:以下安卓航班分别列举了Android开发中的不同存储方式的特点. 一,Preferences Pref ...

  2. android中onclick事件失效,Android中OnClick事件的三种方法

    //第一种方式 Button Btn1 = (Button)findViewById(R.id.button1);//获取按钮资源 Btn1.setOnClickListener(new Button ...

  3. Android开发中完全退出程序的三种方法

    Android程序有很多Activity,比如说主窗口A,调用了子窗口B,在B中如何关闭整个Android应用程序呢? 这里给大家三种比较简单的方法实现. 首先要说明在B中直接使用finish(),接 ...

  4. android中资源文件的两种访问方式,在android开发中进行数据存储与访问的多种方式介绍...

    在android开发中进行数据存储与访问的多种方式介绍 更新时间:2013年06月07日 16:24:23   作者: 很多时候我们的软件需要对处理后的数据进行存储或再次访问,Android为数据存储 ...

  5. Android开发中配置JDK环境的几种方式

    文章目录 一.前言 二.IDE设置 三.环境变量 四.gradle中配置 五.参考链接 一.前言 在Android开发中,配置JDK环境有以下几种方式来是Android项目正常编译 - changin ...

  6. Android 开发中的多线程编程技术

    此文章来自"Intel Software"应用开发 多线程这个令人生畏的"洪水猛兽",很多人谈起多线程都心存畏惧.在Android开发过程中,多线程真的很难吗? ...

  7. android开发模式,Android开发中无处不在的设计模式

    Android开发中无处不在的设计模式――单例模式 Android开发中无处不在的设计模式――Builder模式 前面介绍了单例模式和Builder模式,有兴趣的见上面两个链接,这篇文章侧重介绍1下视 ...

  8. Android开发中常见的设计模式

    对于开发人员来说,设计模式有时候就是一道坎,但是设计模式又非常有用,过了这道坎,它可以让你水平提高一个档次.而在android开发中,必要的了解一些设计模式又是非常有必要的.对于想系统的学习设计模式的 ...

  9. Android开发中的多线程编程技术

    Android开发中的多线程编程技术 [IT168技术]多线程这个令人生畏的"洪水猛兽",很多人谈起多线程都心存畏惧.在Android开发过程中,多线程真的很难吗?多线程程序的&q ...

最新文章

  1. 关于最长公共子序列的执行过程
  2. ​Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数
  3. mysql关于访问权限以及root密码修改
  4. linux一切对象皆文件,为什么说Linux下“一切皆文件”?
  5. 从一个帖子看部分大学生的学习心态
  6. 安装软件包的三种方法rpm包rpm工具yum工具
  7. 使用OpenCV-python对植物图片进行分类
  8. 网易研选大数据架构演进
  9. android渠道校验,Android渠道版本自动化校验
  10. 整数倒转问题的算法实现
  11. 海量中文语料上预训练ALBERT模型:参数更少,效果更好
  12. oracle rollback 观察时间
  13. arcgis中python批处理_基于Python的ArcGIS空间数据格式批处理转换工具开发
  14. 通过简单案例,理解观察者模式
  15. Flink StreamingFileSink写入hdfs,文件一直处于inprogress
  16. 码农的自我修养之从需求分析到软件设计
  17. Eclipse_Java文件注解乱码
  18. 一个链接泄露这么多隐私,你还敢拼多多助力吗?
  19. 2022_WWW_Improving Graph Collaborative Filtering with Neighborhood-enriched Contrastive Learning
  20. 令人拍案叫绝的算法学习网站新手算法入门到精通,算法面试冲刺资料这里都有

热门文章

  1. PHP 实现汇聚adapay调用微信支付
  2. JVM 常用配置参数(Java 8)
  3. 看透这些才能赢,句句经典
  4. input 使用outline属性去掉淡蓝色边框不生效
  5. 自动驾驶Apollo安装步骤
  6. MySql 如何将一维表变成二维表
  7. Python 教程之 Pandas(14)—— 使用 Pandas 进行数据分析
  8. 西游记团队与Scrum团队中的角色关系映射
  9. 注解@Primary
  10. 1.线性回归(Tensorflow)