平时在写程序时经常会遇到监听器,比如按钮的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. lintcode-109-数字三角形

    109-数字三角形 给定一个数字三角形,找到从顶部到底部的最小路径和.每一步可以移动到下面一行的相邻数字上. 注意事项 如果你只用额外空间复杂度O(n)的条件下完成可以获得加分,其中n是数字三角形的总 ...

  2. java-2018-01-17计划

    1.一句英语 包括单词 2.一个java版本的设计模式 参考:https://github.com/iluwatar/java-design-patterns 学习了抽象工厂模式 总结:java的RS ...

  3. ubuntu16.04 装了一天的gitlab

    1.安装gitlab baidu安装完了[后续再自己写安装过程] 2.遇到的问题 访问gitlab http://ip 可以进入页面也能操作但是console报404无法加载js和css,这样很不方便 ...

  4. 【转】深入理解Java中的String

    原文链接:http://www.cnblogs.com/xiaoxi/p/6036701.html 一.String类 想要了解一个类,最好的办法就是看这个类的实现源代码,来看一下String类的源码 ...

  5. could not read column value from result set:

    错误描述: INFO [http-apr-8080-exec-26] (NullableType.java:203) - could not read column value from result ...

  6. Delphi 7学习开发控件(续)

    继上次我们学习开发一个简单的画线控件后,基本的制作控件步骤已经清楚了,这次我们继续加深学习控件的制作.我们打开Delphi 7创建一个应用程序,拖动LineTo控件到窗体上,仔细看左边的对象设计器,可 ...

  7. spring笔记二

    DI—Dependency Injection,即“依赖注入”:组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中.依赖注入的目的并非为软件系统带来更多功能,而是 ...

  8. 【bzoj4052】[Cerc2013]Magical GCD 暴力

    题目描述 给出一个长度在 100 000 以内的正整数序列,大小不超过 10^12.  求一个连续子序列,使得在所有的连续子序列中,它们的GCD值乘以它们的长度最大. 样例输入 1 5 30 60 2 ...

  9. 做一个iframe的弹出框

    群里有个人想在微信页面里面加弹出框.作为前端的我,想着不可能这样做.后来一个人说了: A:如果对方没有防盗链的话,你可以建个页面,内置iframe 到他的页面,然后把url 的参数也传入你的ifram ...

  10. hdu 3486 Interviewe (RMQ+二分)

    Interviewe Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...