【前言】

按钮少的时候用第三种的匿名内部类会比较快,比如写demo测试的时候或者登陆界面之类。

按钮多的时候一般选择第四种写法。

一、第一种写法:在XML文件中声明onClick属性(很少用)

在XML文件中显式指定控件的onClick属性,点击按钮时会利用反射的方式调用对应Activity中的onClick()方法。

(1)xml文件代码如下:

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical" >
  6.  
  7. <Button
  8. android:id="@+id/btn1"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:onClick="onClick"
  12. android:text="按钮1" />
  13.  
  14. <Button
  15. android:id="@+id/btn2"
  16. android:layout_width="wrap_content"
  17. android:layout_height="wrap_content"
  18. android:onClick="onClick"
  19. android:text="按钮2" />
  20.  
  21. </LinearLayout>

上面的代码中,我们在第11行、18行指定了onClick属性,然后接下来在Activity中写一个onClick同名方法。

(2)MainActivity.java:

  1. package com.vae01;
  2.  
  3. import android.app.Activity;
  4. import android.content.DialogInterface.OnClickListener;
  5. import android.os.Bundle;
  6. import android.view.View;
  7. import android.widget.Button;
  8. import android.widget.ImageView;
  9. import android.widget.TextView;
  10. import android.widget.Toast;
  11.  
  12. public class MainActivity extends Activity {
  13.  
  14. private Button btn1, btn2;
  15.  
  16. @Override
  17. protected void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. setContentView(R.layout.activity_main);
  20. initView();
  21. }
  22.  
  23. // 方法:初始化View
  24. private void initView() {
  25. btn1 = (Button) findViewById(R.id.btn1);
  26. btn2 = (Button) findViewById(R.id.btn2);
  27. }
  28.  
  29. //方法:控件View的点击事件
  30. public void onClick(View v) {
  31. switch (v.getId()) {
  32. case R.id.btn1:
  33. Toast.makeText(MainActivity.this, "btn1", Toast.LENGTH_SHORT).show();
  34. break;
  35. case R.id.btn2:
  36. Toast.makeText(MainActivity.this, "btn2", Toast.LENGTH_SHORT).show();
  37. break;
  38.  
  39. default:
  40. break;
  41. }
  42. }
  43. }

注意,第30行的onClick()方法的权限是public,毕竟xml文件还要访问的嘛。

二、第二种写法:使用内部类(很少用)

(1)xml文件:

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical" >
  6.  
  7. <Button
  8. android:id="@+id/btn1"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:text="按钮1" />
  12.  
  13. <Button
  14. android:id="@+id/btn2"
  15. android:layout_width="wrap_content"
  16. android:layout_height="wrap_content"
  17. android:text="按钮2" />
  18.  
  19. </LinearLayout>

(2)MainActivity.java:

  1. package com.vae01;
  2.  
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.view.View.OnClickListener;
  7. import android.widget.Button;
  8. import android.widget.ImageView;
  9. import android.widget.TextView;
  10. import android.widget.Toast;
  11.  
  12. public class MainActivity extends Activity {
  13.  
  14. private Button btn1, btn2;
  15.  
  16. @Override
  17. protected void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. setContentView(R.layout.activity_main);
  20. initView();
  21. }
  22.  
  23. // 方法:初始化View
  24. private void initView() {
  25. btn1 = (Button) findViewById(R.id.btn1);
  26. btn2 = (Button) findViewById(R.id.btn2);
  27.  
  28. btn1.setOnClickListener(new MyClickListener());
  29. btn2.setOnClickListener(new MyClickListener());
  30. }
  31.  
  32. class MyClickListener implements OnClickListener {
  33. @Override
  34. public void onClick(View v) {
  35. switch (v.getId()) {
  36. case R.id.btn1:
  37. Toast.makeText(MainActivity.this, "btn1", Toast.LENGTH_SHORT).show();
  38. break;
  39. case R.id.btn2:
  40. Toast.makeText(MainActivity.this, "btn2", Toast.LENGTH_SHORT).show();
  41. break;
  42. default:
  43. break;
  44. }
  45. }
  46. }
  47. } 

注意第28、29行:不要忘记了绑定监听器。

三、第三种写法:匿名内部类(适合场景:测试、或者只有单个button的时候。使用较多

(1)xml文件:

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical" >
  6.  
  7. <Button
  8. android:id="@+id/btn1"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:text="按钮1" />
  12.  
  13. <Button
  14. android:id="@+id/btn2"
  15. android:layout_width="wrap_content"
  16. android:layout_height="wrap_content"
  17. android:text="按钮2" />
  18.  
  19. </LinearLayout>

(2)MainActivity.java:

  1. package com.vae01;
  2.  
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.view.View.OnClickListener;
  7. import android.widget.Button;
  8. import android.widget.Toast;
  9.  
  10. public class MainActivity extends Activity {
  11.  
  12. private Button btn1, btn2;
  13.  
  14. @Override
  15. protected void onCreate(Bundle savedInstanceState) {
  16. super.onCreate(savedInstanceState);
  17. setContentView(R.layout.activity_main);
  18. initView();
  19. }
  20.  
  21. // 方法:初始化View
  22. private void initView() {
  23. btn1 = (Button) findViewById(R.id.btn1);
  24. btn2 = (Button) findViewById(R.id.btn2);
  25.  
  26. btn1.setOnClickListener(new OnClickListener(){
  27. @Override
  28. public void onClick(View v) {
  29. Toast.makeText(MainActivity.this, "btn1", Toast.LENGTH_SHORT).show();
  30. }
  31.  
  32. });
  33.  
  34. btn2.setOnClickListener(new OnClickListener(){
  35. @Override
  36. public void onClick(View v) {
  37. Toast.makeText(MainActivity.this, "btn2", Toast.LENGTH_SHORT).show();
  38. }
  39.  
  40. });
  41. }
  42. }

四、第四种写法:Activity实现View.OnClickListener接口(最常用)

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

(1)xml代码:

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical" >
  6.  
  7. <Button
  8. android:id="@+id/btn1"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:text="按钮1" />
  12.  
  13. <Button
  14. android:id="@+id/btn2"
  15. android:layout_width="wrap_content"
  16. android:layout_height="wrap_content"
  17. android:text="按钮2" />
  18.  
  19. </LinearLayout>

(2)MainActivity.java:

  1. package com.vae01;
  2.  
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.view.View.OnClickListener;
  7. import android.widget.Button;
  8. import android.widget.Toast;
  9.  
  10. public class MainActivity extends Activity implements OnClickListener{
  11.  
  12. private Button btn1, btn2;
  13.  
  14. @Override
  15. protected void onCreate(Bundle savedInstanceState) {
  16. super.onCreate(savedInstanceState);
  17. setContentView(R.layout.activity_main);
  18. //初始化View
  19. initView();
  20. }
  21.  
  22. // 方法:初始化View
  23. private void initView() {
  24. btn1 = (Button) findViewById(R.id.btn1);
  25. btn2 = (Button) findViewById(R.id.btn2);
  26.  
  27. //按钮绑定点击事件的监听器
  28. btn1.setOnClickListener(this);
  29. btn2.setOnClickListener(this);
  30. }
  31.  
  32. //方法:按钮的单击事件
  33. @Override
  34. public void onClick(View v) {
  35. switch (v.getId()) {
  36. case R.id.btn1:
  37. Toast.makeText(MainActivity.this, "btn1", Toast.LENGTH_SHORT).show();
  38. break;
  39. case R.id.btn2:
  40. Toast.makeText(MainActivity.this, "btn2", Toast.LENGTH_SHORT).show();
  41. break;
  42. default:
  43. break;
  44. }
  45. }
  46. }

 

Android代码规范----按钮单击事件的四种写法的更多相关文章

  1. 转--Android按钮单击事件的四种常用写法总结

    这篇文章主要介绍了Android按钮单击事件的四种常用写法总结,比较了常见的四种写法的优劣,有不错的参考借鉴价值,需要的朋友可以参考下     很多学习Android程序设计的人都会发现每个人对代码的 ...

  2. Android按钮单击事件的四种常用写法

    这篇文章主要介绍了Android按钮单击事件的四种常用写法总结,比较了常见的四种写法的优劣,有不错的参考借鉴价值,需要的朋友可以参考下 很多学习Android程序设计的人都会发现每个人对代码的写法都有 ...

  3. Android按钮单击事件的四种常用写法总结

    很多学习Android程序设计的人都会发现每个人对代码的写法都有不同的偏好,比较明显的就是对控件响应事件的写法的不同.因此本文就把这些写法总结一下,比较下各种写法的优劣,希望对大家灵活地选择编码方式可 ...

  4. [Android] 按钮单击事件的五种写法

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

  5. Android代码学习--点击事件的几种写法

    由来:常规的写法参见<写一个apk>,每次点击按钮,按钮先查找文本框等元素,然后再操作,其实查找操作是很费时的操作,因此将该定义放到Activity的onCreate中:Oncreate只 ...

  6. Android中点击事件的四种写法详解

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

  7. Android笔记---点击事件的四种写法

    Android 点击事件的四种写法: 1. 以内部类的形式实现 OnClickListener 接口.定义点击事件 class MainActivity extents Activity{ // .. ...

  8. Android开发系列之button事件的4种写法

    经过前两篇blog的铺垫,我们今天热身一下,做个简单的样例. 文件夹结构还是引用上篇blog的截图. 详细实现代码: public class MainActivity extends Activit ...

  9. JAVA_SWT 事件的四种写法

    一:匿名内部类写法 在一个组件下加入以下语句 text.addMouseListener(new MouseAdapter(){ public void mouseDoubleClich(MouseE ...

随机推荐

  1. 中国各城市PM2.5数据间的相关分析

    code{white-space: pre;} pre:not([class]) { background-color: white; }if (window.hljs && docu ...

  2. [.NET] 使用C#开发SQL Function来提供数据 - 天气预报

    [.NET] 使用C#开发SQL Function来提供数据 - 天气预报 范例下载 范例程序代码:点此下载 问题情景 开发人员在设计一些数据汇整的系统服务时,可能会选择WCF.WebAPI.Sign ...

  3. DOM性能小记

    在使用DOM操作时,同样的效果用不同的方式来实现,性能方面也会有很大的差异.尤其在移动式设备上,资源本来就很有限,一旦DOM写不好的话操作就会非常卡顿.这个周末,就写个DOM性能小记吧.错漏之处,望多 ...

  4. 关于C#中Environment.OSVersion判断操作系统及Win10上的问题

    我们都知道在C#中可以通过Environment.OSVersion来判断当前操作系统,下面是操作系统和主次版本的对应关系: 操作系统 主版本.次版本 Windows 10 10.0* Windows ...

  5. SharePoint 2010 文档管理系列之星级评论功能

    前言:正如我们前面介绍的是,文档管理就是让大家更加直观.方便的对手里的文档,进行统筹掌控,哪些文档是有价值的,哪些文档更受大家欢迎,所有就带来了这个星级评论. 当然,这个是SharePoint 201 ...

  6. android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件

    简介 XStream 是一个开源项目,一套简单实用的类库,用于序列化对象与 XML 对象之间的相互转换. 将 XML 文件内容解析为一个对象或将一个对象序列化为 XML 文件. 1.下载工具 xstr ...

  7. iOS开发工程师面试知识点汇总

    1.KVO实现原理 2.内存管理 3.Runtime 4.GCD 5.Block 6.响应者链 7.@peoperty属性特性 8.单元格cell加载图片处理

  8. 一个基于Myeclipse开发的Java打地鼠小游戏(Appletcation)

    package javaes.zixue.wangshang.daima; 2 3 import java.awt.Cursor; import java.awt.Image; import java ...

  9. CGContextRef使用简要教程

    CGContextRef使用简要教程 Graphics Context是图形上下文,也可以理解为一块画布,我们可以在上面进行绘画操作,绘制完成后,将画布放到我们的view中显示即可,view看作是一个 ...

  10. java实现栈和队列

    class Node { int val; Node next; Node(int x) { val = x; next = null; } } class Stack { Node top; pub ...