为你的程序添加监听器

平时在写程序时经常会遇到监听器,比如按钮的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方法如下:

    @Overridepublic void Out() {// TODO Auto-generated method stubSystem.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;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);caller = new CallerClass();caller.setCallBack(this);caller.Out();}@Overridepublic void Out() {// TODO Auto-generated method stubSystem.out.println("这是Activity上的输出");}}
复制代码

 

 

 

三、结果

Perfect~

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

转载于:https://www.cnblogs.com/dongweiq/p/4096520.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376509.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图像处理

android图像处理系列之四--给图片添加边框(上) http://www.oschina.net/question/157182_40586 android图像处理系列之六--给图片添加边框(下)-图片叠加 http://www.osc…

Git push 时每次都需要密码的疑惑

2015.1.13更新: 在本地搭建Git服务器时,也是有每次操作需要密码的情况。 是因为每次做推送动作时,Git需要认证你是好人。所以需要密码。 可以在 /home/username/.ssh/authorized_keys 文件里添加你的 ssh 公钥。一行一个。这样就可以在你push…

ruby字符串处理

1. str"abc123"puts str[0].chr > a puts str[0] >a的ascii码 2.中文字符串的正则表达式 文本编码:utf-8 文件第一行:#encoding:urf-8 require "iconv" str"八万"reg/(.)万/datareg.match(str)result Iconv.i…

PHP+七牛云存储上传图片代码片段

2014年11月14日 16:37:51 第一段代码是上传单个图片的,第二个是上传多个图片的 1 //上传到七牛2 //单个文件3 //formname: 表单名字; pre: 图片Url中显示的图片名字(也就是七牛中的key)4 public function upImage($formname, $pre)5 {6 if (empty($_FI…

【PS】Gold words tutorials 赤金字教程

material_01material_021. White background and black words.The font of "Laker" is Teenick, and "Huang" is 中國龍粗魏碑2.Open material_01 and select a part of it.Copy and paste the part part into our workspace.You can drag and move to pa…

iOS 键盘的关闭

iOS 键盘的关闭 //通过委托来放弃 “第一响应者” #pragma mark - UITextField Delegate Method -(BOOL)textFieldShouldReturn:(UITextField*)textField {[textField resignFirstResponder];return YES; } //通过委托来放弃 “第一响应者” #pragma mark - UITextView Delegat…

递归与分治

今天总算把第三章递归与分治看完了,呵呵,没想到开头就给我来了点打击,看以后不认真学还真不行了! 为了祝贺初战告捷,把几个简单的题目贴上来吧,纪念一下! 《整数因子分解》 大于1的正整数n可以分…

Android中的Handler机制

直接在UI线程中开启子线程来更新TextView显示的内容,运行程序我们会发现,如下错 误:android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.翻译过来就是&…

初来乍到

从今天开始,我也加入博客园这个大家庭了,希望能和大家一起学习IT技术,共同进步。小弟初来乍到,望大家能多多关照!转载于:https://www.cnblogs.com/markwave/p/3227777.html

JQuery学习四(过滤选择器)

&#xff1a;first选择第一个元素。$&#xff08;“div:first”&#xff09;进行选择第一个<div> :last 选择最后一个最后一个元素 $&#xff08;"div:last"&#xff09;选取最后一个<div> [:not(选择器&#xff09;] 选择不满足“选择器”条件的元素 $…

160 - 1 Acid burn

环境&#xff1a;Windows XP sp3 先打开&#xff0c;看看长什么样&#xff1a; OD载入&#xff0c;右键->查找->所有参考文本字串 找到Sorry,The serial is incorect 找到后就在反汇编窗口跟随&#xff0c;往上翻&#xff1a; 0042F998 /. 55 push ebp 0…

跟树有关的数据结构学习系列之概览

1.Binary Search Tree&#xff08;BST&#xff09; 二叉搜索树 2.B-Tree 3.BTree 4.B*Tree转载于:https://www.cnblogs.com/devindong/p/3233041.html

在社会实践中长本领

暑假回到家&#xff0c;家里要我在自家店里帮忙&#xff0c;做员工。因为我家跟舅舅家合资开了一家家禽冻品批发部&#xff0c;生意兴旺&#xff0c;越做越大&#xff0c;忙得不可开交。在自家店里做员工&#xff0c;当然&#xff0c;家里人都很高兴&#xff0c;我也乐意。在员…

Animating Layout Changes(展开收起)

原文地址&#xff1a;https://developer.android.com/training/animation/layout.html#add &#xff08;1&#xff09;设置布局文件&#xff1a; <LinearLayout android:id"id/container"android:animateLayoutChanges"true"... /> &#xff08;2&am…

160 - 2 Afkayas.1

环境&#xff1a; Windows Xp sp3 OD载入&#xff1a; 运行&#xff0c;然后输入&#xff1a; 然后回到OD&#xff0c;按F12来暂停&#xff0c; 然后ALTF9回到程序领空&#xff0c;把弹出的那个错误消息框点掉&#xff0c;这时OD来到这里&#xff1a; 004025F9 . 68 E81…

POJ 2125 Destroying The Graph (二分图最小点权覆盖集+输出最小割方案)

题意 有一个图&#xff0c; 两种操作&#xff0c;一种是删除某点的所有出边&#xff0c;一种是删除某点的所有入边&#xff0c;各个点的不同操作分别有一个花费&#xff0c;现在我们想把这个图的边都删除掉&#xff0c;需要的最小花费是多少。 思路 很明显的二分图最小点权覆盖…

160 - 3 Afkayas.2

环境&#xff1a; Windows xp sp3 这次的目标有两个&#xff1a; 1.去除Nag窗口 2.找出Serial的算法 1.这次去除Nag窗口用了另外两个程序&#xff1a; &#xff08;1&#xff09;VBLocalize v1.1.0.0 &#xff08;2&#xff09;UltraEdit &#xff08;3&#xff09;VBEx…

class threading.Thread()说明:

class threading.Thread()说明&#xff1a; class threading.Thread(groupNone, targetNone, nameNone, args(), kwargs{}) This constructor should always be called with keyword arguments. Arguments are: group should be None; reserved for future extension when a Th…

并行编程——内存模型之顺序一致性

1 定义 Sequential consistency , 简称 SC&#xff0c;定义如下 … the result of any execution is the same as if the operations of all the processors were executed in some sequential order, and the operations of each individual processor appear in this sequen…

160 - 4 ajj.1

环境&#xff1a; Windows Xp sp3 输入Name和Serial&#xff0c;无错误提示。看说明&#xff0c;只有正确时才有提示 OD载入&#xff0c;搜索字符串&#xff0c;发现两个字符串&#xff1a; Panel1DblClick和Panel1Click 一个双击一个单击 先跟随单击的&#xff1a; 00457…