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;">&lt;</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;">/&gt;</span>
<span style="color: #0000ff;">&lt;</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;">/&gt;</span>
<span style="color: #0000ff;">&lt;</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;">/&gt;</span>
<span style="color: #0000ff;">&lt;</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;">/&gt;</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)的更多相关文章

  1. Jquery中each的三种遍历方法

    Jquery中each的三种遍历方法 $.post("urladdr", { "data" : "data" }, function(dat ...

  2. Java中Map的三种遍历方法

    Map的三种遍历方法: 1. 使用keySet遍历,while循环: 2. 使用entrySet遍历,while循环: 3. 使用for循环遍历.   告诉您们一个小秘密: (下↓面是测试代码,最爱看 ...

  3. CentOS中JDK的三种配置方法

    第一种方法(相对稳妥): 使用yum直接安装,在root用户下执行 "yum install java-openjdk-*" 第二种方法(最为稳妥): 前往'https://www ...

  4. Hive中笔记 :三种去重方法,distinct,group by与ROW_Number()窗口函数

    一.distinct,group by与ROW_Number()窗口函数使用方法 1. Distinct用法:对select 后面所有字段去重,并不能只对一列去重. (1)当distinct应用到多个 ...

  5. Python中class的三种继承方法

    class parent(object): def implicit(self): print("Parent implicit()") def override(self): p ...

  6. c++中new的三种用法详细解析

    转载至: http://www.jb51.net/article/41524.htm 以下的是对c++中new的三种使用方法进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助. 一. ...

  7. 痞子衡嵌入式:在IAR开发环境下将关键函数重定向到RAM中执行的三种方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下将关键函数重定向到RAM中执行的三种方法. 嵌入式项目里应用程序代码正常是放在 Flash 中执行的,但有时候也需要将 ...

  8. Unity3d中如何混用三种脚本语言?

    首先要明白,这三种说的混用是指文件级别的混用,就是说一个文件是由一种语言写的.而不是说你这一个文件可以混用这三种语言,注意这是不允许的. 第二要明白,在unity3d中为什么可以使用三种语言混合开发? ...

  9. LwIP协议栈开发嵌入式网络的三种方法分析

    LwIP协议栈开发嵌入式网络的三种方法分析   摘要  轻量级的TCP/IP协议栈LwIP,提供了三种应用程序设计方法,且很容易被移植到多任务的操作系统中.本文结合μC/OS-II这一实时操作系统,以 ...

随机推荐

  1. jmeter--错误之Not able to find Java executable or version. Please check your Java installation. errorlevel=2

    学习jmeter中遇到的问题: 'findstr' 不是内部或外部命令,也不是可运行的程序或批处理文件. Not able to find Java executable or version. Pl ...

  2. UML学习总结(3)——StarUML指导手册

    StarUML使用说明-指导手册 原著:Stephen Wong            翻译:火猴 StarUML是一种生成类图和其他类型的统一建模语言(UML)图表的工具.这是一个用Java语言描述 ...

  3. Swift UIView 层次调整

    Swift 中添加的UIView都是有层级的. 我们先添加三个看一看 let view1=UIView(frame: CGRectMake(10, 50, 200, 200)) let view2=U ...

  4. 9.5 Binder系统_驱动情景分析_transaction_stack机制

    参考文章:http://www.cnblogs.com/samchen2009/p/3316001.html test_server服务进程可能有多个线程,而在发送数据的时候handle只表示了那个进 ...

  5. 源码笔记---MBProgressHUD

    前言 作为初学者,想要快速提高自己的水平,阅读一些优秀的第三方源代码是一个非常好的途径.通过看别人的代码,可以学习不一样的编程思路,了解一些没有接触过的类和方法. MBProgressHUD是一个非常 ...

  6. 【Codeforces Round #440 (Div. 2) B】Maximum of Maximums of Minimums

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] k=1的时候就是最小值, k=2的时候,暴力枚举分割点. k=3的时候,最大值肯定能被"独立出来",则直接输出最 ...

  7. .dmp文件导出使用示例

    exp导出的几种用例,先睹为快: 1 将数据库SampleDB完全导出,用户名system 密码manager 导出到E:/SampleDB.dmp中 exp system/manager@TestD ...

  8. 安装hadoop1.2.1集群环境 分类: A1_HADOOP 2014-08-29 15:49 1444人阅读 评论(0) 收藏

    一.规划 (一)硬件资源 10.171.29.191 master 10.173.54.84  slave1 10.171.114.223 slave2 (二)基本资料 用户:  jediael 目录 ...

  9. QAtomicInt支持四种类型的操作,Relaxed、Acquired、Release、Ordered

    Memory Ordering   Background 很久很久很久以前,CPU忠厚老实,一条一条指令的执行我们给它的程序,规规矩矩的进行计算和内存的存取. 很久很久以前, CPU学会了Out-Of ...

  10. 监听text等的改变事件

    oninput事件是html5的标准事件,支持ie9和以上以及其他的火狐啊谷歌啊等浏览器 ie9以下的可以用onpropertychange <head>     <script t ...