在平时学习安卓的过程中,不论是看视频还是看博客,我发现每个人对代码的写法都有不同的偏好,比较明显的就是对控件响应事件的写法的不同。所以我想把这些写法总结一下,比较下各种写法的优劣,希望可以让自己可以灵活地选择编码方式。

原文地址请保留 http://www.cnblogs.com/rossoneri/p/3975468.html

xml文件

<Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Button1" /><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Button2" />

四种方法:

  • 匿名内部类

    public class TestButtonActivity extends Activity {Button btn1, btn2;Toast tst;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_test_button);btn1 = (Button) findViewById(R.id.button1);btn2 = (Button) findViewById(R.id.button2);btn1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubToast tst = Toast.makeText(TestButtonActivity.this, "111111111", Toast.LENGTH_SHORT);tst.show();}});btn2.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubToast tst = Toast.makeText(TestButtonActivity.this, "222222222", Toast.LENGTH_SHORT);tst.show();}});}}

  • 自定义单击事件监听类

    public class TestButtonActivity extends Activity {Button btn1, btn2;Toast tst;class MyClickListener implements OnClickListener {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (v.getId()) {case R.id.button1:tst = Toast.makeText(TestButtonActivity.this, "111111111", Toast.LENGTH_SHORT);tst.show();break;case R.id.button2:tst = Toast.makeText(TestButtonActivity.this, "222222222", Toast.LENGTH_SHORT);tst.show();break;default:break;}}}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_test_button);btn1 = (Button) findViewById(R.id.button1);btn2 = (Button) findViewById(R.id.button2);btn1.setOnClickListener(new MyClickListener());btn2.setOnClickListener(new MyClickListener());}}

  • Activity继承View.OnClickListener,由Activity实现OnClick(View view)方法,在OnClick(View view)方法中用switch-case对不同id代表的button进行相应的处理

    public class TestButtonActivity extends Activity implements OnClickListener {Button btn1, btn2;Toast tst;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_test_button);btn1 = (Button) findViewById(R.id.button1);btn2 = (Button) findViewById(R.id.button2);btn1.setOnClickListener(this);btn2.setOnClickListener(this);}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (v.getId()) {case R.id.button1:tst = Toast.makeText(this, "111111111", Toast.LENGTH_SHORT);tst.show();break;case R.id.button2:tst = Toast.makeText(this, "222222222", Toast.LENGTH_SHORT);tst.show();break;default:break;}}
    }

  • 最后一种是我今天看到的一种写法,在XML文件中“显示指定按钮的onClick属性,这样点击按钮时会利用反射的方式调用对应Activity中的click()方法”[注1]

    <Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="onClick"android:text="Button1" /><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="onClick"android:text="Button2" />

  • 这里在输完android:的时候按下 Alt+/ 会有 onClick 属性的提示, 但输入到 android:onClick=“ 的地方按下 Alt+/ 并没有提示 onClick 选项,让我突然觉得这里好像有点问题。这种写法整个代码中都不用声明button就可以实现button的单击事件。
public class TestButtonActivity extends Activity {Button btn1, btn2;Toast tst;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_test_button);}// 注意 这里没有 @Override 标签public void onClick(View v) {// TODO Auto-generated method stubswitch (v.getId()) {case R.id.button1:tst = Toast.makeText(this, "111111111", Toast.LENGTH_SHORT);tst.show();break;case R.id.button2:tst = Toast.makeText(this, "222222222", Toast.LENGTH_SHORT);tst.show();break;default:break;}}
}

以上就是四种实现按钮单击事件的方法。

粗略总结一下,就是按钮少的时候用匿名内部类会比较快,比如写demo测试的时候或者登陆界面之类的。

按钮多的情况我还是选择第三种方法,方便。

关于第四种方法,我感觉最方便,但看了很多代码还是觉得写法挺小众,不知为什么,这一点还需要我多研究研究。

转载于:https://www.cnblogs.com/powerwu/articles/6955628.html

[Android] 按钮单击事件的五种写法相关推荐

  1. Android代码规范----按钮单击事件的四种写法

    [前言] 按钮少的时候用第三种的匿名内部类会比较快,比如写demo测试的时候或者登陆界面之类. 按钮多的时候一般选择第四种写法. 一.第一种写法:在XML文件中声明onClick属性(很少用) 在XM ...

  2. Android中点击事件的四种写法

    Android中点击事件的四种写法 使用内部类实现点击事件 使用匿名内部类实现点击事件 让MainActivity实现View.OnClickListener接口 通过布局文件中控件的属性 第一种方法 ...

  3. Android按钮响应事件的四种方式

    一.按钮响应事件的四种方式 整体布局 沿用登录界面,对登录按钮进行事件响应处理 <?xml version="1.0" encoding="utf-8"? ...

  4. android按钮响应事件吗,Android 按钮响应事件的几种方式

    目录 1.在布局中指定onClick属性 布局代码 android:id="@+id/btn1" android:layout_width="wrap_content&q ...

  5. android四种点击事件,android点击事件的四种方式

    android点击事件的四种方式 第一种方式:创建内部类实现点击事件 代码如下: package com.example.dail; import android.text.TextUtils; im ...

  6. Android按钮事件的4种写法

    经过前两篇blog的铺垫,我们今天热身一下,做个简单的例子. 目录结构还是引用上篇blog的截图. 具体实现代码: public class MainActivity extends Activity ...

  7. android如何绑定事件,Android_安卓为按钮控件绑定事件的五种方式

    一.写在最前面 本次,来介绍一下安卓中为控件--Button绑定事件的五种方式. 二.具体的实现 第一种:直接绑定在Button控件上: 步骤1.在Button控件上设置android:onClick ...

  8. Android中按钮的点击事件的四种写法

    如题,在Android中按钮的点击事件有四种写法,如下图. 界面为四个Button+一个TextView+一个ImageView activity_main布局文件如下: <?xml versi ...

  9. 事件处理之二:点击事件监听器的五种写法

    首选方法二! 方法一:写一个内部类,在类中实现点击事件 1.在父类中调用点击事件 bt_dail.setOnClickListener(new MyButtonListener()); 2.创建内部类 ...

最新文章

  1. 春意袭人,春装网店大比拼!
  2. 测试人员在需求阶段应做哪些工作
  3. Android环境下通过C框架层控制WIFI【转】
  4. 控制台调用win32 API 示例二则
  5. 事件标志组的删除与状态查询
  6. 安卓开发实现画廊效果
  7. Sql Server之旅——第二站 理解讨厌的表扫描
  8. php图片滑动的属性,使用css怎么实现图片的滑动效果?(示例)
  9. realme x2 深度测试打不开_realme 的产品到底是不是贴牌的?
  10. 巨头垂涎却不能染指,loT 数据库风口已至
  11. 移动互联网新协议 GTP 中被曝多个高危漏洞,影响4G和5G 用户
  12. Netty的并发编程实践4:线程安全类的应用
  13. AT91SAM9260使用SAM-BA调试BOOT程序
  14. 互联网创新创业大赛优秀范例_互联网创业大赛优秀作品_ 创新创业大赛优秀作品...
  15. 2019辽宁公务员考试:申论突破80+学习计划第一步
  16. [系统安全] 反病毒与免杀原理概论
  17. echarts瀑布图_Echarts自定义瀑布图开发
  18. 自动化装配流水线转载运输机,3D图纸。图纸stp格式1g大小零件齐全
  19. Spark MLlib特征处理:MinMax最大最小值区间缩放---原理及实战
  20. KVM虚拟化平台搭建、工作模式与原理

热门文章

  1. 计算机与十进制 教案,二进制与十进制间的转换教案
  2. 一次违反常规的Java大厂面试经历,你还看不懂吗?
  3. 【深度学习】详解集成学习的投票和Stacking机制
  4. python【数据结构与算法】对python抽象的再探索(看不懂你来打我)
  5. 和 对比_家用保温杯小对比
  6. 通配符 泛域名 linux,openssl签署自己的泛域名(通配符)证书
  7. 大头贴计算机教程,美颜相机大头贴在哪里 教你怎么弄动漫大头贴
  8. PHP_crontab 漏洞,shopex 4.8.5.45144 \core\include_v5\crontab.php 远程shell写入漏洞
  9. mpi和openmp混合编程的优点_西门子PLC可编程控制器CPU1215C一级总代理
  10. 网络推广是什么告诉大家如何高效提高网站权重?