平时在写程序时经常会遇到监听器,比如按钮的click监听器,按键监听器等等。而android中的监听器和java中的回调函数是同一个概念,都是在底层代码中定义一个接口来调用高层的代码。那么什么是回调函数呢?网上说的是“在WINDOWS中,程序员想让系统DLL调用自己编写的一个方法,于是利用DLL当中回调函数(CALLBACK)的接口来编写程序,使它调用,这个就称为回调。在调用接口时,需要严格的按照定义的参数和方法调用,并且需要处理函数的异步,否则会导致程序的崩溃。这样的解释似乎还是比较难懂,这里举个简单的例子,程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序。程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法。”按照我的理解就是在程序A中先挖了一个坑,然后等着你在程序B中去填里面的内容。不填?那就是被坑咯~

一、定义回调函数

  1. 建立一个类,其中包括一个接口的变量

    private CallBack callBack;//接口的变量
  2. 建立一个接口的声明
    public interface CallBack{
    public void Out();//接口里面要实现的方法
    }
  3. 在类中与接口绑定(或者说获得接口的引用)
    public void setCallBack(CallBack callBack){
    this.callBack = callBack;
    } public void Out(){
    callBack.Out();
    System.out.println("这是CallerClass的输出");
    }
  4. 整个类
    public class CallerClass {
    
        private CallBack callBack;//接口的声明
    
        public CallerClass(){};
    
        public void setCallBack(CallBack callBack){
    this.callBack = callBack;
    } public void Out(){
    callBack.Out();
    System.out.println("这是CallerClass的输出");
    } public interface CallBack{
    public void Out();//接口里面要实现的方法
    } }

二、调用回调函数

我这里是在Activity中绑定接口,实际代码如下:

public class MainActivity extends Activity implements CallerClass.CallBack{  private CallerClass caller; ...}

继承了CallerClass中的CallBack接口,Out方法如下:

    @Override
public void Out() {
// TODO Auto-generated method stub
System.out.println("这是Activity上的输出");
}

最后在onCreate中调用CallerClass的Out()方法:

caller = new CallerClass();
caller.setCallBack(this);
caller.Out();

完整代码:

public class MainActivity extends Activity implements CallerClass.CallBack{

    private CallerClass caller;

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
caller = new CallerClass();
caller.setCallBack(this);
caller.Out(); } @Override
public void Out() {
// TODO Auto-generated method stub
System.out.println("这是Activity上的输出");
} }

三、结果

aaarticlea/png;base64,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" alt="" />

Perfect~

interface的作用感觉和C++中的指针差不多,它是一个地址的引用,但没有生成内存。所以我们能够预先为程序赋予要执行的方法。不止如此,interface在设计模式的作用更是强大,工厂模式,建造者模式,观察者模式无不用到interface。

Android的简单应用(三)——为你的程序添加监听器的更多相关文章

  1. 【朝花夕拾】Android多线程之(三)runOnUiThread篇——程序猿们的贴心小棉袄

    runOnUiThread()的使用以及原理实在是太简单了,简单到笔者开始都懒得单独开一篇文章来写它.当然这里说的简单,是针对对Handler比较熟悉的童鞋而言的.不过麻雀虽小,五脏俱全,runOnU ...

  2. Android 最简单的SD卡文件遍历程序

    package com.wenhao.test.sddemo; import java.io.File; import android.app.Activity; import android.os. ...

  3. Android之RecyclerView简单使用(三)

    使用过ListView滴小伙伴都知道.ListView有这样一个属性android:divider,用来设置每一个item之间切割线滴属性.问题来了,那么RecyclerView这个控件有没有这个属性 ...

  4. Android抓包方法(三)之Win7笔记本Wifi热点+WireShark工具

    Android抓包方法(三) 之Win7笔记本Wifi热点+WireShark工具 前言 做前端测试,基本要求会抓包,会分析请求数据包,查看接口是否调用正确,数据返回是否正确,问题产生是定位根本原因等 ...

  5. Android 实现简单音乐播放器(二)

    在Android 实现简单音乐播放器(一)中,我介绍了MusicPlayer的页面设计. 现在,我简单总结一些功能实现过程中的要点和有趣的细节,结合MainActivity.java代码进行说明(写出 ...

  6. android的消息处理有三个核心类:Looper,Handler和Message。

    android的消息处理机制(图+源码分析)——Looper,Handler,Message   作为 一名android程序员,我学习android的一大乐趣是可以通过源码学习google大牛们的设 ...

  7. 【转】Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析

    原文网址:http://blog.csdn.net/xubin341719/article/details/38584469 关键词:蓝牙blueZ  A2DP.SINK.sink_connect.s ...

  8. 【转】android 电容屏(三):驱动调试之驱动程序分析篇

    关键词:android  电容屏 tp 工作队列 中断 坐点计算  电容屏主要参数平台信息:内核:linux2.6/linux3.0系统:android/android4.0  平台:S5PV310( ...

  9. Android知识简单测试题

    上周去了一场Android考试,前面基础的题目很简单却答不上来,看过跟做过,懂了和会讲差距还是很大的,下面整理一下还记得的几个问题,自勉! 还是觉得,要好好看官方文档才是正道的啊! 1. Androi ...

随机推荐

  1. cocos2d-x环境搭建 摘自百度文库

    cocos2d-x环境搭建 引言:笔者在网上寻觅了很多资料,最终发现了这份实际可用的文档,供大家参考.源地址:http://wenku.baidu.com/view/93f7b0f1102de2bd9 ...

  2. python进制转换(二进制、十进制和十六进制)及注意事项

    使用内置函数实现进制转换实现比较简单,主要用到以下函数: bin().oct().int().hex() 下面分别详解一下各个函数的使用(附实例) 第一部分:其他进制转十进制 1.二进制转十进制 使用 ...

  3. 第一个Spring小程序实战

    ps:本文偏向原理和操作性,原理适合于任何编译器. 支持Spring入门,目的是在xml文件里面装配相关bean(java对象),并实现获取.(IOC) 一.先建立一个Spring新项目,添加mave ...

  4. java连接mysql底层封装

    package com.dao.db; import java.sql.Connection; import java.sql.SQLException; /** * 数据库连接层MYSQL * @a ...

  5. password & Encryption

    password & Encryption cipher https://dev.tencent.com/login

  6. 黑群晖DSM 6.1网卡支持列表

    黑群晖DSM 6.1网卡支持列表 Network Drivers====================================AMDamd8111e : AMD 8111 (new PCI ...

  7. 【题解】NOI2017游戏

    2-SAT.洛谷P3845 一开始以为——怎么有3个呢?后来发现因为每个地图都有一种车是不能用的,所以就等于每一个地图都有两个适应的车啦. 那么对于x类型的地图呢——只有8个,直接2^8暴力枚举每一种 ...

  8. Mybatis缓存机制及mybatis的各个组成部分

    Mybatis 一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该Session中的所有 ...

  9. HTML5 canvas流体力学效果

    某人用Java搞了一个流体力学的演示:http://grantkot.com/MPM/Liquid.html. 下面是 HTML 5版的流体力学演示(推荐使用Chrome浏览器浏览): 效果演示 &l ...

  10. 用DOM解析XML ,用xpath快速查询XML节点

    XPath是一种快速查询xml节点和属性的一种语言,Xpath和xml的关系就像是sql语句和数据库的关系.用sql语句可以从数据库中快速查询出东西同样的用xPath也可以快速的从xml中查询出东西. ...