平时在写程序时经常会遇到监听器,比如按钮的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. Hibernate 查询,返回结果设置到DTO

    1:原生sql的查询,返回结果设置到DTO: Query query = sessionFactoryRtData.getCurrentSession().createSQLQuery(hql.toS ...

  2. 第十一次ScrumMeeting会议

    第十一次ScrumMeeting 时间:2017/11/18 4:00-4:30 地点:主203 人员:全体人员 照片: 工作情况 名字 今日计划 明天的工作 遇到的困难 蔡帜 讨论策划详情\确定WB ...

  3. mysql初始(6)

    随着mysql的运用不断加深,一些更复杂点的用法又需要总结起来. 1.将一个表中的数据插入到另一个表中: a.两张表字段相同,并且数据全部插入,命令如下:  INSERT INTO 目标表 SELEC ...

  4. PAT 1015 德才论

    https://pintia.cn/problem-sets/994805260223102976/problems/994805307551629312 宋代史学家司马光在<资治通鉴>中 ...

  5. 【Linux】——搭建nexus

    1.安装 前提条件: JDK已经安装,运行java -version查看. 将本地下载好的nexus存放到linux上,存放路径为 /usr/local/software.可使用winscp直接拷贝. ...

  6. P4467 [SCOI2007]k短路

    题目描述 有 n 个城市和 m 条单向道路,城市编号为 1 到 n .每条道路连接两个不同的城市,且任意两条道路要么起点不同要么终点不同,因此 n 和 m 满足 m \le n(n-1)m≤n(n−1 ...

  7. HDU 6153 A Secret(扩展KMP模板题)

    A Secret Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 256000/256000 K (Java/Others) Total ...

  8. hadoop基础----hadoop实战(九)-----hadoop管理工具---CDH的错误排查(持续更新)

    在CDH安装完成后或者CDH使用过程中经常会有错误或者警报,需要我们去解决,积累如下: 解决红色警报 时钟偏差 这是因为我们的NTP服务不起作用导致的,几台机子之间有几秒钟的时间偏差. 这种情况下一是 ...

  9. 用原生JavaScript做个简单的回到顶部

    很多网页在下方都会放置一个“返回顶部”按钮,尤其是页面底部没有导航的网页,这样可以帮助访客重新找到导航或者重温一遍广告(想得真美).随着近几年来 JavaScript 的应用日渐广泛,滑动效果无处不在 ...

  10. spring事务不回滚 自己抛的异常

    在service代码中   throw new Excepion("自定义异常“) 发现没有回滚, 然后百度了下, 改为抛出运行时异常  throw new RuntimeException ...