Android开发-之监听button点击事件
一、实现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点击事件的更多相关文章
- ButtonAddListener监听按钮点击事件
ButtonAddListener监听按钮点击事件 using UnityEngine; using System.Collections; using UnityEngine.UI; using U ...
- Android开发之监听发出的短信
执行效果图: 预备知识: 为了监听指定的ContentProvider的数据的改变,须要通过ContentResolver向指定Uri注冊CotentObserver监听器.ContentResolv ...
- Android开发14——监听内容提供者ContentProvider的数据变化
一.提出需求 有A,B,C三个应用,B中的数据需要被共享,所以B中定义了内容提供者ContentProvider:A应用修改了B应用的数据,插入了一条数据.有这样一个需求,此时C应用需要得到数据被修改 ...
- Android开发之实现多次点击事件
在Android中给我们提供了单次点击事件.但并没有给我们提供双击,或者实现在一定时间内的多次事件.所以需要我们自己在单机监听上进行修改实现. 有如下两种实现方式: 1.定义一个存贮上一个第一次点击的 ...
- #你好Unity3D#Hierarchy视图监听gameObject点击事件
今天无意间又找到了个好方法 1 2 3 4 5 6 7 8 9 10 [InitializeOnLoadMethod] static void Start () { Selection.s ...
- 【Android开发】监听图库数据库的变化
步骤一: 保存图片或者删除之前,初始化ContentObserver ScreenshotContentObserver mScreenObserver = new ScreenshotContent ...
- layui监听radio点击事件
layui.form.on('radio(layui_dataType)', function(data){ console.log(data.elem); //得到radio原始DOM对象 cons ...
- [Android]对话框样式Activity获得窗口外点击事件
Dialog除了使用Dialog类来实现之外,还可以使用Dialog样式的Activity来实现,只需要在注册Activity时指明theme为adnroid:Theme.Dialog就行,这样的Di ...
- Android实战简易教程-第十五枪(实现ListView中Button点击事件监听)
1.main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" x ...
随机推荐
- 结合Jexus + Kestrel 部署 asp.net core 生产环境
ASP.NET Core 是微软的全新的框架.这一框架的目标 ︰ 跨平台 针对云应用优化 解除 System.Web 的依赖. 获得下面三个方面的优势,你可以把它认为是一个C# 版本的NodeJS: ...
- 高大上的微服务可以很简单,使用node写微服务
安装 npm install m-service --save 使用 编写服务处理函数 // dir1/file1.js // 使用传入的console参数输出可以自动在日志里带上request id ...
- Hyper-v 安装CentOS 7 (其他虚拟机一样参考)
平台之大势何人能挡? 带着你的Net飞奔吧!http://www.cnblogs.com/dunitian/p/4822808.html hyper-v安装很多人没弄过,我这里介绍一下.(其他虚拟机参 ...
- 操作系统篇-hello world(免系统运行程序)
|| 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.前言 今天起开始分享关于操作系统的相关知识,本人也是菜鸟一个,正处于学习阶段,这整个操作系统篇也是我边学习边总结的一些结果,希 ...
- jQuery可自动播放动画焦点图插件Koala
Koala是一款简单而实用的jQuery焦点图幻灯片插件,焦点图不仅可以在播放图片的时候让图片有淡入淡出的动画效果,而且图片可以自动播放.该jQuery焦点图的每一张图片都可以设置文字描述,并浮动在图 ...
- Highcharts中国地图热力图
最近有个项目需要将MC销量按大陆各省统计,并以中国地图人力图效果显示.由于项目一直使用Highcharts进行图表的统计,故采用Highmaps来实现. 效果如下: 1)中国各个省.直辖市.自治区: ...
- MySQL ALTER命令
当我们需要修改数据表名或者修改数据表字段时,就需要使用到MySQL ALTER命令. 开始本文教程前让我们先创建一张表,表名为:testalter_tbl. root@host# mysql -u r ...
- 不要着急改代码,先想想--centos 6.8下编译安装tmux
诸位读者新年好,2017开年第一篇博客,请允许我先问候一下看到这篇博客的诸位.写博客是我2017年定下的目标之一,希望我会坚持下去. 最近打算尝试一下tmux这个神器,于是有了这一篇关于思维方式的Bl ...
- Jexus Web Server 完全傻瓜化图文配置教程(基于Ubuntu 12.04.3 64位)[内含Hyper-v 2012虚拟机镜像下载地址]
1. 前言 近日有感许多新朋友想尝试使用Jexus,不过绝大多数都困惑徘徊在Linux如何安装啊,如何编译Mono啊,如何配置Jexus啊...等等基础问题,于是昨日向宇内流云兄提议,不如搞几个配置好 ...
- Xamarin.Android之使用百度地图起始篇
一.前言 如今跨平台开发层出不穷,而对于.NET而言时下最流行的当然还是Xamarin,不仅仅能够让我们在熟悉的Vs下利用C#开发,在对原生态类库的支持方面也有着非常的好支持,今天我们将会以百度地图类 ...