一、实现button点击事件的方法

  实现button点击事件的监听方法有很多种,这里总结了常用的四种方法:

  1、匿名内部类

  2、外部类(独立类)

  3、实现OnClickListener接口

  4、添加XML属性

  每一种方法都有它的优点也有它的不足,那么接下来就来详细的讲解这四个实现方法

二、具体实现

  1、匿名内部类:

  在Android开发中我们会经常看到各种匿名内部类的使用,那么在实现button点击事件的时候也可以用匿名内部类。

  这样使用的好处是:1)不需要重新写一个类,直接在new的时候去实现想实现的方法,很方便。

           2)当别的地方都用不到这个方法的时候使用匿名内部类

           3)高内聚,高内聚是设计原则之一,匿名内部类的特性之一就是拥有高内聚。

  但是也有不足的地方:1)当别的地方也需要同样的一个方法时还要重新再在那个地方写一次匿名内部类,这样使得代码的冗余性很高。

            2)不方便后期的维护

  a、添加一个按钮

<Button
android:id="@+id/button1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textView1"
android:layout_marginTop="20dp"
android:text="方法一:匿名内部类" />

  

  b、回到MainActivity中实现

public class MainActivity extends Activity{

    private Button btn1;

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); /*
* 方法一:使用匿名内部类实现button按钮的
*/
//绑定button按钮
btn1 = (Button) findViewById(R.id.button1); //监听button事件
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast tot = Toast.makeText(
MainActivity.this,
"匿名内部类实现button点击事件",
Toast.LENGTH_LONG);
tot.show();
}
});
}
}

  c、运行结果

  2、独立类(外部类):

  重新写一个独立的类来实现业务逻辑或是想要的效果

  这样写的好处是:1)一定情况下可以方便维护

          2)可以降低代码的冗余性,可以同时使用到多个地方

  不足的地方是:1)当只使用一次时浪费资源,程序的性能不高

         2)当有很多个方法时代码的可读性不高,此时不方便维护

  a、添加一个button按钮

 <Button
android:id="@+id/button2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/button1"
android:layout_below="@+id/button1"
android:layout_marginTop="20dp"
android:text="方法二:独立类" />

  b、回到MainActivity中实现,外部类中需要实现OnClickListener接口,并重写其中的方法

public class MainActivity extends Activity {

    private Button btn2;

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); /*
* 方法二:独立类实现button实现
*/
btn2 = (Button) findViewById(R.id.button2);
btn2.setOnClickListener(new btn2Click(this)); }
}
public class btn2Click implements OnClickListener {

    private Context context;

    //重载btn2Click方法
public btn2Click(Context ct){
this.context=ct;
} @Override
public void onClick(View v) {
Toast tot = Toast.makeText(
context,
"独立类实现button点击事件",
Toast.LENGTH_LONG);
tot.show();
} }

  c、运行效果

  3、实现OnClickListener接口:

  与独立类实现的原理是一样的,优点和缺陷也是大径相同的,实现OnClickListener接口的时候实现它其中的onClick方法

  a、添加button按钮

<Button
android:id="@+id/button3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/button2"
android:layout_below="@+id/button2"
android:layout_marginTop="20dp"
android:text="方法三:实现接口" />

  b、回到MainActivity中实现

public class MainActivity extends Activity implements OnClickListener {

    private Button btn3;

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); /*
* 方法三:实现OnClickListener接口
*/
btn3 = (Button) findViewById(R.id.button3);
btn3.setOnClickListener(this); } //实现OnClickListener接口中的方法
@Override
public void onClick(View v) {
Toast tot = Toast.makeText(
MainActivity.this,
"接口OnClickListener实现button点击事件",
Toast.LENGTH_LONG);
tot.show(); }
}

  c、运行效果

  4、添加XML属性:

  我们可以给XML添加一个onClick属性来实现点击事件的监控

  这样的好处是:更加便捷,代码量能够减少

  但是不足的地方是:每一次维护的时候都要去XML里面改源码,是不是很不好维护很麻烦呢?

  a、添加一个button按钮,并添加onClick按钮

<Button
android:id="@+id/button4"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button3"
android:layout_below="@+id/button3"
android:layout_marginTop="20dp"
android:onClick="btn4Click"
android:text="方法四:添加xml属性" />

  b、回到MainActivity中实现onClick按钮

 /*
* 方法四:添加XML属性
*/
public void btn4Click(View v){
Toast tot = Toast.makeText(
MainActivity.this,
"添加XML标签实现button点击事件",
Toast.LENGTH_LONG);
tot.show();
}

  c、运行结果:

三、总结:

  1、在实现监听的时候都是需要两步走:

    1)绑定button按钮

    2)监听button事件

  1、具体使用什么方法去实现button按钮点击事件的监听要看具体的需求,都各有各的好处和不足。如果只使用一次则推荐使用内部类的方法;如果多次使用则使用外部类的方法;实现接口的方法可以在原本的类中实现;但是在XML里面添加属性的方法时不推荐的,毕竟很不好去维护。

  2、内部类的使用在Android开发中是经常用到的,所以非常的重要,这里附上我之前总结的博客园博文链接:http://www.cnblogs.com/xiao-chuan/p/6014752.html

  3、Android开发中有很多按钮,但是监听的方法常用的都是这几种,所以能够举一反三,这也是为什么写这个的原因

  4、Toast是Android中一个实现的效果,是不是经常看到这个效果呢?在写监听的时候顺便也把Toast一起学了,一举两得哈哈哈!!

PS:看似零零散散的知识点,但所有的知识点都是一条连线的,任何行业的知识点都是如此,就好比先有了数字才出现算数,先出现了英文字母才有了单词一样。。。

Android开发-之监听button点击事件的更多相关文章

  1. ButtonAddListener监听按钮点击事件

    ButtonAddListener监听按钮点击事件 using UnityEngine; using System.Collections; using UnityEngine.UI; using U ...

  2. Android开发之监听发出的短信

    执行效果图: 预备知识: 为了监听指定的ContentProvider的数据的改变,须要通过ContentResolver向指定Uri注冊CotentObserver监听器.ContentResolv ...

  3. Android开发14——监听内容提供者ContentProvider的数据变化

    一.提出需求 有A,B,C三个应用,B中的数据需要被共享,所以B中定义了内容提供者ContentProvider:A应用修改了B应用的数据,插入了一条数据.有这样一个需求,此时C应用需要得到数据被修改 ...

  4. Android开发之实现多次点击事件

    在Android中给我们提供了单次点击事件.但并没有给我们提供双击,或者实现在一定时间内的多次事件.所以需要我们自己在单机监听上进行修改实现. 有如下两种实现方式: 1.定义一个存贮上一个第一次点击的 ...

  5. #你好Unity3D#Hierarchy视图监听gameObject点击事件

    今天无意间又找到了个好方法     1 2 3 4 5 6 7 8 9 10 [InitializeOnLoadMethod] static void Start () {   Selection.s ...

  6. 【Android开发】监听图库数据库的变化

    步骤一: 保存图片或者删除之前,初始化ContentObserver ScreenshotContentObserver mScreenObserver = new ScreenshotContent ...

  7. layui监听radio点击事件

    layui.form.on('radio(layui_dataType)', function(data){ console.log(data.elem); //得到radio原始DOM对象 cons ...

  8. [Android]对话框样式Activity获得窗口外点击事件

    Dialog除了使用Dialog类来实现之外,还可以使用Dialog样式的Activity来实现,只需要在注册Activity时指明theme为adnroid:Theme.Dialog就行,这样的Di ...

  9. Android实战简易教程-第十五枪(实现ListView中Button点击事件监听)

    1.main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" x ...

随机推荐

  1. 十分钟介绍mobx与react

    原文地址:https://mobxjs.github.io/mobx/getting-started.html 写在前面:本人英语水平有限,主要是写给自己看的,若有哪位同学看到了有问题的地方,请为我指 ...

  2. Key/Value之王Memcached初探:二、Memcached在.Net中的基本操作

    一.Memcached ClientLib For .Net 首先,不得不说,许多语言都实现了连接Memcached的客户端,其中以Perl.PHP为主. 仅仅memcached网站上列出的语言就有: ...

  3. Matlab数值计算示例: 牛顿插值法、LU分解法、拉格朗日插值法、牛顿插值法

    本文源于一次课题作业,部分自己写的,部分借用了网上的demo 牛顿迭代法(1) x=1:0.01:2; y=x.^3-x.^2+sin(x)-1; plot(x,y,'linewidth',2);gr ...

  4. CentOS 7配置LNMP开发环境及配置文件管理

    安装并配置MySQL 5.6 从CentOS从7.x开始默认使用MariaDB.MariaDB完全兼容MySQL,包括API和命令行.但是很多时候我们还是会想要安装MySQL,所以不能直接通过yum命 ...

  5. WPF样式之画刷结合样式

    第一种画刷,渐变画刷GradientBrush (拿线性渐变画刷LinearGradientBrush(其实它涵盖在GradientBrush画刷内.现在拿他来说事.),还有一个圆心渐变画刷Radia ...

  6. 在Linux系统下运行微信Web开发者工具

    微信Web开发者工具只有window版本和mac版本,如果想要在Linux系统下运行微信Web开发者工具,需要花费很大周折. 注:带 * 的步骤或文件为不确定是否管用的步骤或文件.本人系统为Linux ...

  7. 免费开源的DotNet任务调度组件Quartz.NET(.NET组件介绍之五)

    很多的软件项目中都会使用到定时任务.定时轮询数据库同步,定时邮件通知等功能..NET Framework具有“内置”定时器功能,通过System.Timers.Timer类.在使用Timer类需要面对 ...

  8. jQuery幻灯片插件autoPic

    原文地址:Jquery自定义幻灯片插件 插件效果图: 演示地址:autoPic项目地址:autoPic 欢迎批评指正!

  9. spring boot 实战:我们的第一款开源软件

    在信息爆炸时代,如何避免持续性信息过剩,使自己变得专注而不是被纷繁的信息所累?每天会看到各种各样的新闻,各种新潮的技术层出不穷,如何筛选出自己所关心的? 各位看官会想,我们是来看开源软件的,你给我扯什 ...

  10. Autofac - MVC/WebApi中的应用

    Autofac前面写了那么多篇, 其实就是为了今天这一篇, Autofac在MVC和WebApi中的应用. 一.目录结构 先看一下我的目录结构吧, 搭了个非常简单的架构, IOC(web), IBLL ...