Android的简单应用(三)——为你的程序添加监听器
平时在写程序时经常会遇到监听器,比如按钮的click监听器,按键监听器等等。而android中的监听器和java中的回调函数是同一个概念,都是在底层代码中定义一个接口来调用高层的代码。那么什么是回调函数呢?网上说的是“在WINDOWS中,程序员想让系统DLL调用自己编写的一个方法,于是利用DLL当中回调函数(CALLBACK)的接口来编写程序,使它调用,这个就称为回调。在调用接口时,需要严格的按照定义的参数和方法调用,并且需要处理函数的异步,否则会导致程序的崩溃。这样的解释似乎还是比较难懂,这里举个简单的例子,程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序。程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法。”按照我的理解就是在程序A中先挖了一个坑,然后等着你在程序B中去填里面的内容。不填?那就是被坑咯~
一、定义回调函数
- 建立一个类,其中包括一个接口的变量
private CallBack callBack;//接口的变量
- 建立一个接口的声明
public interface CallBack{
public void Out();//接口里面要实现的方法
} - 在类中与接口绑定(或者说获得接口的引用)
public void setCallBack(CallBack callBack){
this.callBack = callBack;
} public void Out(){
callBack.Out();
System.out.println("这是CallerClass的输出");
} - 整个类
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的简单应用(三)——为你的程序添加监听器的更多相关文章
- 【朝花夕拾】Android多线程之(三)runOnUiThread篇——程序猿们的贴心小棉袄
runOnUiThread()的使用以及原理实在是太简单了,简单到笔者开始都懒得单独开一篇文章来写它.当然这里说的简单,是针对对Handler比较熟悉的童鞋而言的.不过麻雀虽小,五脏俱全,runOnU ...
- Android 最简单的SD卡文件遍历程序
package com.wenhao.test.sddemo; import java.io.File; import android.app.Activity; import android.os. ...
- Android之RecyclerView简单使用(三)
使用过ListView滴小伙伴都知道.ListView有这样一个属性android:divider,用来设置每一个item之间切割线滴属性.问题来了,那么RecyclerView这个控件有没有这个属性 ...
- Android抓包方法(三)之Win7笔记本Wifi热点+WireShark工具
Android抓包方法(三) 之Win7笔记本Wifi热点+WireShark工具 前言 做前端测试,基本要求会抓包,会分析请求数据包,查看接口是否调用正确,数据返回是否正确,问题产生是定位根本原因等 ...
- Android 实现简单音乐播放器(二)
在Android 实现简单音乐播放器(一)中,我介绍了MusicPlayer的页面设计. 现在,我简单总结一些功能实现过程中的要点和有趣的细节,结合MainActivity.java代码进行说明(写出 ...
- android的消息处理有三个核心类:Looper,Handler和Message。
android的消息处理机制(图+源码分析)——Looper,Handler,Message 作为 一名android程序员,我学习android的一大乐趣是可以通过源码学习google大牛们的设 ...
- 【转】Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析
原文网址:http://blog.csdn.net/xubin341719/article/details/38584469 关键词:蓝牙blueZ A2DP.SINK.sink_connect.s ...
- 【转】android 电容屏(三):驱动调试之驱动程序分析篇
关键词:android 电容屏 tp 工作队列 中断 坐点计算 电容屏主要参数平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台:S5PV310( ...
- Android知识简单测试题
上周去了一场Android考试,前面基础的题目很简单却答不上来,看过跟做过,懂了和会讲差距还是很大的,下面整理一下还记得的几个问题,自勉! 还是觉得,要好好看官方文档才是正道的啊! 1. Androi ...
随机推荐
- PAT——乙级1036:跟奥巴马一起编程 &乙级1027:打印沙漏 (有坑)
乙级1036 1036 跟奥巴马一起编程 (15 point(s)) 美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统.2014 年底,为庆祝“计算 ...
- hyperledger composer
hyperledger composer 网站搜集 https://hyperledger.github.io/composer/latest/introduction/introduction.ht ...
- 简单java采集程序一
[目标任务]通过该网站采集全国的手机号码段至数据库表中 [完成过程] 1.初涉正则表达式,学会写简单的正则表达式 2.获取单个网页内容,学会java中基本的IO流 3.将获取数据插入mysql数据库表 ...
- const在c/c++中的区别
#include <iostream> using namespace std; int main() { ; ; }; ; i < sizeof array / sizeof *a ...
- 团队作业4——第一次项目冲刺(Alpha版本)-第三篇
项目冲刺——第三阶段 前两阶段很ok,目测这三天可以搞定! 分工讨论 大体上搞定,设置困难度的功能还未完成. 团队成员 任务 郭达 整合各种代码 刘德培 数据库完善和其他人对接 石浩洋 完善PH ...
- 关于debian配置的问题汇总
debian的apache多域名配置: https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-virtual-ho ...
- BZOJ5323 [Jxoi2018]游戏 【数论/数学】
题目链接 BZOJ5323 题解 有一些数是不能被别的数筛掉的 这些数出现最晚的位置就是该排列的\(t(p)\) 所以我们只需找出所有这些数,线性筛一下即可,设有\(m\)个 然后枚举最后的位置 \[ ...
- C++——设计与演化——读书笔记
<<c++设计与演化>>1.c++的保护模式来自于访问权限许可和转让的概念; 初始化和赋值的区分来自于转让能力的思考; c++的const概念是从读写保护机制中演化出来. 2. ...
- BZOJ 3629 JLOI2014 聪明的燕姿 约数和+DFS
根据约数和公式来拆s,最后再把答案乘出来,我们发先这样的话递归层数不会太大每层枚举次数也不会太多,然而我们再来个剪枝就好了 #include<cstdio> #include<ios ...
- (一)STM32固件库详解(转载)
本篇博文是转载自emouse,因为不能直接转载,所以是复制过来再发布的. emouse原创文章,转载请注明出处http://www.cnblogs.com/emouse/ 1.1 基于标准外设库的 ...