droid开发中监听器的三种实现方法(OnClickListener)
Android开发中监听器的实现有三种方法,对于初学者来说,能够很好地理解这三种方法,将能更好地增进自己对android中监听器的理解。
一、什么是监听器。
监听器是一个存在于View类下的接口,一般以On******Llistener命名,实现该接口需要复写相应的on****(View v)方法(如onClick(View v))。
二、监听器的三种实现方法
(以OnClickListener为例)
方法一:在Activity中定义一个内部类继承监听器接口(这里是OnClickListener)。常见的继承方法如下:
class MyListener implements View.OnClickListener{
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"you have clicked Button2",Toast.LENGTH_SHORT).show();
}
}
或者可以用另外一种方式,即new一个该监听器(OnClickListener)的对象,这个方式与上面的直接继承有异曲同工之妙。

// 或者,这里是创建一个OnClickListener 的对象,与上面的直接复写接口有异曲同工之妙
private View.OnClickListener MyListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"you have clicked Button2",Toast.LENGTH_SHORT).show();
}
};

以上两个实现的监听器在onCreate(Bundle savedInstanceState)方法中的调用都是一样的,即使用setOnClickListener()方法。
bt2.setOnClickListener(new MyListener());
方法二:实现匿名内部类。这种方法适合只希望对监听器进行一次性使用的情况,在该代码块运行完毕之后,该监听器也就不复存在了。
bt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"you have clicked Button1",Toast.LENGTH_SHORT).show();
}
});
方法三:利用布局文件中的onClick属性,并在实现文件中实现该方法。注意的是这里的方法名应该和布局文件中onClick属性的方法名相同,该方法必须是public方法。
// 方法三,注意需要public方法
public void onButtonClick (View view){
Toast.makeText(MainActivity.this,"you have clicked Button3",Toast.LENGTH_SHORT).show();
}
}
在布局文件中的设置

<Button
android:layout_below="@id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button3"
android:text="Button3"
android:onClick="onButtonClick"/>

以上就是android中实现监听器的三种方法。
下面是整个项目的完整代码
布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.jeffrey.listener.MainActivity"><span style="color: #0000ff;"><</span><span style="color: #800000;">TextView
</span><span style="color: #ff0000;">android:layout_width</span><span style="color: #0000ff;">="wrap_content"</span><span style="color: #ff0000;">
android:layout_height</span><span style="color: #0000ff;">="wrap_content"</span><span style="color: #ff0000;">
android:id</span><span style="color: #0000ff;">="@+id/text"</span><span style="color: #ff0000;">
android:text</span><span style="color: #0000ff;">="OnClickListener"</span> <span style="color: #0000ff;">/></span>
<span style="color: #0000ff;"><</span><span style="color: #800000;">Button
</span><span style="color: #ff0000;">android:layout_below</span><span style="color: #0000ff;">="@id/text"</span><span style="color: #ff0000;">
android:layout_width</span><span style="color: #0000ff;">="wrap_content"</span><span style="color: #ff0000;">
android:layout_height</span><span style="color: #0000ff;">="wrap_content"</span><span style="color: #ff0000;">
android:text</span><span style="color: #0000ff;">="Button1"</span><span style="color: #ff0000;">
android:id</span><span style="color: #0000ff;">="@+id/button1"</span><span style="color: #0000ff;">/></span>
<span style="color: #0000ff;"><</span><span style="color: #800000;">Button
</span><span style="color: #ff0000;">android:layout_below</span><span style="color: #0000ff;">="@id/button1"</span><span style="color: #ff0000;">
android:layout_width</span><span style="color: #0000ff;">="wrap_content"</span><span style="color: #ff0000;">
android:layout_height</span><span style="color: #0000ff;">="wrap_content"</span><span style="color: #ff0000;">
android:text</span><span style="color: #0000ff;">="Button2"</span><span style="color: #ff0000;">
android:id</span><span style="color: #0000ff;">="@+id/button2"</span><span style="color: #0000ff;">/></span>
<span style="color: #0000ff;"><</span><span style="color: #800000;">Button
</span><span style="color: #ff0000;">android:layout_below</span><span style="color: #0000ff;">="@id/button2"</span><span style="color: #ff0000;">
android:layout_width</span><span style="color: #0000ff;">="wrap_content"</span><span style="color: #ff0000;">
android:layout_height</span><span style="color: #0000ff;">="wrap_content"</span><span style="color: #ff0000;">
android:id</span><span style="color: #0000ff;">="@+id/button3"</span><span style="color: #ff0000;">
android:text</span><span style="color: #0000ff;">="Button3"</span><span style="color: #ff0000;">
android:onClick</span><span style="color: #0000ff;">="onButtonClick"</span><span style="color: #0000ff;">/></span>
</RelativeLayout>

实现文件:

package com.example.jeffrey.listener; import android.content.DialogInterface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast; public class MainActivity extends AppCompatActivity {@Override
</span><span style="color: #0000ff;">protected</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> onCreate(Bundle savedInstanceState) {
</span><span style="color: #0000ff;">super</span><span style="color: #000000;">.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button bt1 </span>= (Button)findViewById(R.id.button1);<span style="color: #008000;">//</span><span style="color: #008000;">对应方法二</span>
Button bt2 = (Button)findViewById(R.id.button2);<span style="color: #008000;">//</span><span style="color: #008000;">对应方法一</span>
bt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"you have clicked Button1",Toast.LENGTH_SHORT).show();
}
});bt2.setOnClickListener(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> MyListener()); }
</span><span style="color: #0000ff;">class</span> MyListener <span style="color: #0000ff;">implements</span><span style="color: #000000;"> View.OnClickListener{
@Override
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> onClick(View v) {
Toast.makeText(MainActivity.</span><span style="color: #0000ff;">this</span>,"you have clicked Button2"<span style="color: #000000;">,Toast.LENGTH_SHORT).show();
}
}
</span><span style="color: #008000;">//</span><span style="color: #008000;"> 或者,这里是创建一个OnClickListener 的对象,与上面的直接复写接口有异曲同工之妙</span>
<span style="color: #0000ff;">private</span> View.OnClickListener MyListener = <span style="color: #0000ff;">new</span><span style="color: #000000;"> View.OnClickListener() {
@Override
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> onClick(View v) {
Toast.makeText(MainActivity.</span><span style="color: #0000ff;">this</span>,"you have clicked Button2"<span style="color: #000000;">,Toast.LENGTH_SHORT).show();
}
}; </span><span style="color: #008000;">//</span><span style="color: #008000;"> 方法三,注意需要public方法</span>
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> onButtonClick (View view){
Toast.makeText(MainActivity.</span><span style="color: #0000ff;">this</span>,"you have clicked Button3"<span style="color: #000000;">,Toast.LENGTH_SHORT).show();
}
}

输出结果:当点击相应按钮时会出现“you have clicked Button?”的提示。
总结:三种方法可以说各有好处。第一种方法是新手入门必学。相对于第一种方法,后来两种方法在android开发中是比较常见的,也是大神们经常推荐使用的方法。至于自己想要使用那种方法,就看自己兴趣了。
droid开发中监听器的三种实现方法(OnClickListener)的更多相关文章
- Jquery中each的三种遍历方法
Jquery中each的三种遍历方法 $.post("urladdr", { "data" : "data" }, function(dat ...
- Java中Map的三种遍历方法
Map的三种遍历方法: 1. 使用keySet遍历,while循环: 2. 使用entrySet遍历,while循环: 3. 使用for循环遍历. 告诉您们一个小秘密: (下↓面是测试代码,最爱看 ...
- CentOS中JDK的三种配置方法
第一种方法(相对稳妥): 使用yum直接安装,在root用户下执行 "yum install java-openjdk-*" 第二种方法(最为稳妥): 前往'https://www ...
- Hive中笔记 :三种去重方法,distinct,group by与ROW_Number()窗口函数
一.distinct,group by与ROW_Number()窗口函数使用方法 1. Distinct用法:对select 后面所有字段去重,并不能只对一列去重. (1)当distinct应用到多个 ...
- Python中class的三种继承方法
class parent(object): def implicit(self): print("Parent implicit()") def override(self): p ...
- c++中new的三种用法详细解析
转载至: http://www.jb51.net/article/41524.htm 以下的是对c++中new的三种使用方法进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助. 一. ...
- 痞子衡嵌入式:在IAR开发环境下将关键函数重定向到RAM中执行的三种方法
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下将关键函数重定向到RAM中执行的三种方法. 嵌入式项目里应用程序代码正常是放在 Flash 中执行的,但有时候也需要将 ...
- Unity3d中如何混用三种脚本语言?
首先要明白,这三种说的混用是指文件级别的混用,就是说一个文件是由一种语言写的.而不是说你这一个文件可以混用这三种语言,注意这是不允许的. 第二要明白,在unity3d中为什么可以使用三种语言混合开发? ...
- LwIP协议栈开发嵌入式网络的三种方法分析
LwIP协议栈开发嵌入式网络的三种方法分析 摘要 轻量级的TCP/IP协议栈LwIP,提供了三种应用程序设计方法,且很容易被移植到多任务的操作系统中.本文结合μC/OS-II这一实时操作系统,以 ...
随机推荐
- 异步载入JS
平时最常使用的就是这样的同步载入形式: <script src="http://yourdomain.com/script.js"></script&g ...
- maven 解决Cannot change version of project facet Dynamic web module to 2.5
我们用Eclipse创建Maven结构的web项目的时候选择了Artifact Id为maven-artchetype-webapp,由于这个catalog比较老,用的servlet还是2.3的,而一 ...
- [转载]Surging Demo 项目之一
开发与运行环境 IDE Visual Stadio 2017/Visual Stadio 2019 Visual Stadio Core Docker 和 Docker-Compose 通过docke ...
- 前端实时消息提示的效果-websocket长轮询
WebSocket是html5新增加的特性之一,可以实现客户端和服务器彼此之间相互通信,也可以实现跨域通信,目前大部分主流浏览器都支持,iE浏览器需要10版本以上. 需求:公司项目有一个报警模块,当后 ...
- springboot下静态资源的处理(转)
在SpringBoot中有默认的静态资源文件相关配置,需要通过如下源码跟踪: WebMvcAutoConfiguration-->configureResourceChain(method)-- ...
- api接口安全以及https
一:加密方法: 1,对称加密 AES,3DES,DES等,适合做大量数据或数据文件的加解密. 2,非对称加密 如RSA,Rabin.公钥加密,私钥解密.对大数据量进行加解密时性能较低. 二:https ...
- openGL线型和线宽以及线的抗锯齿
openGL线型和线宽以及线抗锯齿 一. 线宽 Opengl的线宽设置:glLineWidth(width); width为float类型值,在0~10.0,大于10以上按10来处理. 若开启线的反走 ...
- VS2010下配置Opencv2.4.3 .
VS2008下OpenCV的配置过程在OpenCV论坛上写的很详细,具体过程可以见如下链接http://www.opencv.org.cn/index.php/VC_2008_Express%E4%B ...
- ZYNQ7000 LVDS接口输出配置
xilinx 7系列芯片不再支持LVDS33电平,在VCCO电压为3.3V的情况下无法使用LVDS25接口. 有些设计者想通过在软件中配置为LVDS25,实际供电3.3V来实现LVDS33也是无效的, ...
- AE中地图查询方式
樱木 原文 AE中地图查询方式 地图查询主要有两种查询:空间查询和属性查询 所用到知识点: 1 Cursor(游标)对象 本质上是一个指向数据的指针,本身不包含数据内容,提供一个连接到ROW对象或者 ...