20行代码理解回调机制

最近在学习android的过程中发现view的OnClickListener的回调机制很有趣,就学习回调的使用方法。

首先我们自己来实现一下:

1.定义一个接口用于定义回调的方法,这个接口用于定义在某种情形下需要处理的操作,如监听器接口监听button的点击事件。

OnClickListener.java

public interface OnClickListener{
    public void onClick(String str);
}

2.定义Button组件的类

Button.java

public class Button{
    //声明接口
    OnClickListener mOnClickListener;
    //定义设置监听器的方法,用于其他类绑定监听器到该方法上
    public void setOnClickListener(OnClickListener l){
        //传入的OnClickListener对象用来实例化mOnClickListener
        //接口的实例化相当于抽象类被继承实现后的实例化,传入的l已经对
        //该接口定义的onClick()方法进行了实现
        mOnClickListener = l;
    }
    //该方法用来模拟触发button点击事件。
    public void clickButton(){
        if(mOnClickListener != null){
            mOnClickListener.onClick("button");
        }
    }
}

3.Main.java

public class Main {
    public static void main (String args[]){
        //声明组件
        Button bt = new Button();
        //绑定监听器
            bt.setOnClickListener(new OnClickListener(){//匿名内部类,该类实现了OnClickListener接口的onClick()方法
            public void onClick(String str){
                //回调方法
                System.out.println("hello,i am onclick" + str);
            }
        });
        //点击button按钮,触发回调,相当于view类中的performClick()方法
        bt.clickButton();
    }
}

其实Mian类也可以这样实现:

public class Main implements OnClickListener{
    //实现的方法
    public void onClick(String str){
        System.out.println("hello,i am onclick" + str);
    }
    public static void main (String args[]){
        //声明组件
        Button bt = new Button();
        //绑定监听器,因为主类实现了OnClickLisetener接口,虽然传入的参数要求是OnClickListener对象,但是由于实现,Mian类可以向上转型为OnClickListener对象
        bt.setOnClickListener(this);
        //点击button按钮,触发回调,相当于view类中的performClick()方法,在不同的机制中触发的方式不同。可能由其他类触发
        bt.clickButton();
    }
}

运行的效果如下:

总结一下,其实实现一个回调机制就四步:

1.定义回调接口;

2.定义功能类,并在该类中声明回调接口,创建方法用于其他类调用给方法传入接口对象,实现回调;创建触发方法,执行回调接口中的方法;

3.在要使用回调接口的类中实现接口中定义的方法;

4.在要使用回调接口的类中声明功能类,设置监听器;

表述的不是很清楚,如果自己将这段代码实现一遍我想会明白的。欢迎交流。

注:文章原创,完全自由,转载注明出处即可。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-07-30 10:17:42

20行代码理解回调机制的相关文章

HTML5游戏实战(4): 20行代码实现FlappyBird

这个系列很久没有更新了.几个月前有位读者调侃说,能不能一行代码做一个游戏呢.呵呵,接下来一段时间,我天天都在想这个问题,怎么能让GameBuilder+CanTK进一步简化游戏的开发呢.经过几个月的努力,虽然还是做不到一行代码做一个游戏,但是GameBuilder的功能已经有了质的突破了.今天我们用FlappyBird为例介绍一下用GameBuilder +CanTK开发游戏的方法,整个游戏用了不到20行代码. CanTK(Canvas ToolKit)是一个开源的游戏引擎和APP框架,是开发H

20 行代码极速为 App 加上聊天功能

现在很多 App 都需要集成 IM 功能,今天就为大家分享一下集成 IM 基本功能的步骤.本文内容以 JMessage 为例.极光 IM ( JMessage ) = 极光推送 ( JPush ) + IM,本篇只论述其中的 IM 部分,为大家快速集成 IM 功能提供一个简明的范例. 我们先来看一下 IM 的基本功能与本文内容的对应关系: line 0:准备工作 下载 SDK 集成 SDK line 1:引入头文件 #import <JMessage/JMessage.h> JMessage

HTML5游戏实战之20行代码实现打地鼠

之前写过一篇打地鼠的博客70行的代码实现打地鼠游戏,细致思考过后,发现70行代码都有点多余了,应用tangide的控件特性,能够将代码量缩减到20行左右. 先show一下终于成果,点击试玩:打地鼠.或者扫描二维码: 假设你想在这个游戏上改进.点击这里. 開始解说之前,打个广告.欢迎html5游戏开发爱好者扫描下方二维码或者搜群号223466431,增加开发人员QQ群,我们免费提供最高速的开发工具.我们的全部html5游戏都开源. 整个游戏的开发.基于在线H5游戏开发工具TangIDE,相关开发文

20+行代码使用es5 Object.defineProperty 实现简单的watch功能

1 /** 2 * 一个简单的demo 帮助理解defineProperty,只对Object类型参数有效 3 */ 4 $watch=function(myObject,callback){ 5 function initWatch(obj){ 6 for(var i in obj){ 7 if(typeof obj!='object'){ 8 return; 9 } 10 (function(value,o,attr){ 11 var v=value; 12 var oldValue=val

学会python可以上天!20行代码获取斗鱼平台房间数据,就是这么牛逼!

Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象.直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定.它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务.它的语法非常简捷和清晰,与其它大多数程序设计语言不一样,它使用缩进来定义语句. Python支持命令式程序设计.面向对象程序设计.函数式编程.面向切面编程.泛型编程多种编程范式.与Scheme.Ruby.Perl.Tcl等动态语言一样,Python具备垃圾回收

20行代码的倒计时

HTML结构 <div id="clockdiv"> Days: <span class="days"></span><br> Hours: <span class="hours"></span><br> Minutes: <span class="minutes"></span><br> Seconds:

python爬虫-20行代码爬取王者荣耀所有英雄图片,小白也轻轻松松

1.环境 python3.6 需要用到的库: re.os.requests 2.简介 王者荣耀可以算得上是比较受欢迎的手游之一了,应该有不少的人都入坑过农药,我们今天的目的就是要爬取王者荣耀的高清英雄壁纸,包括这些英雄的皮肤,不废话了,go! 3.分析 首先,我们打开王者荣耀的英雄资料 然后,日常F12打开浏览器的开发者工具 可以看到这里返回了一个json数据,里面包含了英雄的名字(cname),皮肤名字(skin_name),英雄id(ename)这个id后面的皮肤有用 具体某一个英雄的网址,

20行js代码制作网页刮刮乐

分享一段用canvas和JS制作刮刮乐的代码,JS部分去掉注释不到20行代码效果如下 盖伦.jpg 刮刮乐.gif HTML部分 <body> ![](img/gailun.jpg) <canvas id="canvas" width="400" height="300"></canvas> </body> 没什么要特别注意的为了效果加了些CSS样式 CSS部分 <style type=&qu

如何用20行Python代码打造一个微信群聊助手?

今天要教大家一个黑科技,20行代码实现自己定制的微信群聊助手,可以用来活跃群气氛,好多群主创建完群后,拉完一群人,之后就一片寂静,有个群聊助手,就可以帮忙活跃群里气氛,通过今天在自己的微信上有一大批好友的公测,效果还可以.(ps:其实最大胆感受还是,这货比我还会撩妹,撩起妹来一套一套的,晒一波自动撩妹图) 废话不说了,具体操做如下: 1.安装python环境,python2.x或着python3.x都行对此程序无影响 2.mac自带python,只需要安装python的itchat库即可 pip