Java接口回调实现按钮监听

做Android开发的时候,经常碰到View的事件监听,虽然一直在用,但从未思考它的实现原理。还有回调函数虽然经常听说,但是总感觉很晕,一想脑袋就开始乱了。所以今天就写点东西来理一下思路。

回调函数

以下是维基百科上的定义:

计算机程序设计中,回调函数,或简称回调(Callback 即call then back 被主函数调用运算后会返回主函数),是指通过函数参数传递到其它代码的,某一块可执行代码引用。这一设计允许了底层代码调用在高层定义的子程序

光看定义可能晦涩难懂,下面还是回到标题,用Java接口回调实现按钮监听。

Java接口回调

我这里的代码基本就仿照Android的按钮监听方式。

首先定义一个接口,里面定义回调函数onClick。

public interface OnClickListener {
    void onClick(Button b);
}

然后我们来实现Button类。

public class Button {
    private OnClickListener listener;

    public void setOnClickListener(OnClickListener listener){
        this.listener=listener;
    }

    public void printSomeThing(String msg){
        System.out.println(msg);
    }

    public void click() {
        listener.onClick(this);
    }

}

最后在main函数中调用。

public class CallBackTest {

    public static void main(String[] args) {
        Button button=new Button();
        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(Button b) {
                b.printSomeThing("按钮被点击");
            }
        });

        System.out.println("开始模拟点击");
        System.out.println("真正的点击应该由系统来调用");
        button.click();
    }

}

大概过程就是button.click()调用回调函数OnClickListener.onClick,但是这个onClick的实现是在button.setOnClickListener里面的匿名内部类实现的。语言还是表达不太清楚,所以还是多看代码吧。

JS中的回调函数

顺便提一下JS中的回调函数吧。因为JS的函数也是对象,可以直接作为参数传递,所以实现起来很简单。

    //模拟服务器返回数据
    var getInfo=function(id,callback){
        var result="<div>Something get By"+id+"</div>";
        setTimeout(function(){
           callback(result);
        },1000);//定时1秒返回数据
    }
    //调用
    getInfo(id,function(result){
        //对返回的result进行处理
    });
时间: 2024-10-12 17:08:11

Java接口回调实现按钮监听的相关文章

&#8203;Java中使用for循环对多个Jbutton按钮监听

Java中Jbutton按钮监听,当多个按钮做的事差不多的时候是可以用for循环的(比如计算器1-9)省事省力. 监听时变量只能是final或者static,不过这些在for循环中明显不行,所以,就在循环里加了个final变量. 嘿嘿,轻松搞定. package com.xinbo; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.

Android耳机线控详解,蓝牙耳机按钮监听(仿酷狗线控效果)

转载请注明出处:http://blog.csdn.net/fengyuzhengfan/article/details/46461253 当耳机的媒体按键被单击后,Android系统会发出一个广播,该广播的携带者一个Action名为MEDIA_BUTTON的Intent.监听该广播便可以获取手机的耳机媒体按键的单击事件. 在Android中有个AudioManager类,该类会维护MEDIA_BUTTON广播的分发,所以要实现耳机按键监听需要向AudioManager注册一个用于接收耳机按键单击

Android中ListView的item按钮监听错乱问题解决办法

在开发中经常会遇到这样的问题,做了一个列表,给列表的每一项添加了按钮监听事件,但是在列表的数据很多的时候经常会出现点击后错乱的问题.对于这种问题,我们在程序中可能都有自己的解决办法,但是你也许第一次发现这个问题的时候会跟我之前一样手足无措. 那么现在我们可以分析一下这种问题的根本原因. 首先,我们来看一下一个出错的BaseAdapter. package com.example.listdelectdemo; import java.util.ArrayList; import android.

java接口回调的经典使用案例

java接口回调的经典使用案例 内容简介: 接口回调的理解及需要关注的问题 接口回调一般常规用法 接口回调简洁用法 接口回调的意义 接口回调简介: 简单的说接口回调就是:调用者A类访问了被调用者B类中的M方法.这个M方法在执行完毕后又调用了A类中的方法. 问题? B类中的M方法是如何访问A类中的方法的呢?弄清了这个问题,也就明白了接口回调. 下面我们根据一个场景描述去编写代码: 我们在调用者Caller类中使用被调用者Collee类中的下载文件方法DownLoadFile().下载完成后要通知C

4.JAVA之GUI编程事件监听机制

事件监听机制的特点: 1.事件源 2.事件 3.监听器 4.事件处理 事件源:就是awt包或者swing包中的那些图形用户界面组件.(如:按钮) 事件:每一个事件源都有自己特点有的对应事件和共性事件.(如:鼠标单击事件) 监听器:将可以触发某一事件的动作(不止一个动作)都已经封装到了监听器中. 以上三者,在java中都已经定义好了,直接获取其对象来用就可以了. 我们要做的事情是,就是对产生的动作进行处理. 图解事件监听机制: 4.JAVA之GUI编程事件监听机制,布布扣,bubuko.com

简述Java中Http/Https请求监听方法

一.工欲善其事必先利其器 做Web开发的人总免不了与Http/Https请求打交道,很多时候我们都希望能够直观的的看到我们发送的请求参数和服务器返回的响应信息,这个时候就需要借助于某些工具啦.本文将采用Fiddler2作为分析工具,Fiddler很强大,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据,是越墙抓包之利器.关于工具的介绍可以参考下面的链接: http://www.cnblogs.com/TankXiao/archive/2012/02

[安卓] 1、页面跳转+按钮监听

共2个layout:main.xml和other.xml;2个activity:MainActivity.java,OtherActivity.java 在mainactivity中重写onCreate,第6行设置按钮监听~ 1 public void onCreate(Bundle savedInstanceState) { 2 super.onCreate(savedInstanceState); 3 setContentView(R.layout.main); 4 Log.v("MainA

关于JAVA中事件分发和监听机制实现的代码实例-绝对原创实用

http://blog.csdn.net/5iasp/article/details/37054171 文章标题:关于JAVA中事件分发和监听机制实现的代码实例 文章地址: http://blog.csdn.net/5iasp/article/details/37054171 作者: javaboy2012Email:[email protected]qq:    1046011462 一.场景假设 假设有博客系统中需要实现如下功能: 系统中用户发布文章,修改文章,删除文章时,需要一些相关的操作

Java接口回调

public class A { private D d; private C c; public A (C c) { this.c = c; } public void setD (D d) { this.d = d; } ... public interface B { public void aa(); public void bb(); public void cc(); } } public class C { private A a = null; ... protected voi