文档章节

回调函数

jacky_123
 jacky_123
发布于 2015/01/22 22:34
字数 648
阅读 34
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

回调函数说白了就是定义一个函数,然后通过参数传递给另一个函数调用。回调不仅是一种技术,更是一种编程思想。

回调函数设计的意义

比如有两个类分别为A和B,B声明了一个借口名字为OnXXXListener,A实现了这个接口,并通过方法(构造,普通函数(setxxx等)等传到B中),B中就可以通过调用接口函数。实际是调用的A里面接口实现的函数。

这样做的好处是,比如B想要把一个对象s传入到A中处理,便可以方便的通过接口函数传过去。

 

自定义dialog的一个回调例子

来看一个片段:

Dialog_edit.java :  相当于类B

public class Dialog_edit extends AlertDialog implements OnClickListener {
 private String text = "";
 private EditText edit;
 private OnDateSetListener mCallback;
 private LinearLayout layout;
 public interface OnDateSetListener {
  void onDateSet(String text);
 }
 protected Dialog_edit(Context context, String title, String value,
   OnDateSetListener Callback) {
  super(context);
  mCallback = Callback;
  TextView label = new TextView(context);
  label.setText("hint");
  // setView(label);
  edit = new EditText(context);
  edit.setText(value);
  layout = new LinearLayout(context);
  layout.setOrientation(LinearLayout.VERTICAL);
  // LinearLayout.LayoutParams param =
  // new LinearLayout.LayoutParams(100, 40);
  // layout.addView(label, param);
  LinearLayout.LayoutParams param2 = new LinearLayout.LayoutParams(200,
    50);
  layout.addView(edit, param2);
  setView(layout);
  setTitle(title);
  setButton("确定", this);
  setButton2("取消", (OnClickListener) null);
 }
 @Override
 public void onClick(DialogInterface dialog, int which) {
  // TODO Auto-generated method stub
  // Log.v("cola", "U click which=" + which);
  text = edit.getText().toString();
  Log.v("cola", "U click text=" + text);
  if (mCallback != null)
   mCallback.onDateSet(text);
 }
}

Frm_Editacctitem.java : 相当于类A

首先实现该接口:

private Dialog_edit.OnDateSetListener mDialogClick_new = new Dialog_edit.OnDateSetListener() {
  public void onDateSet(String text) {
   Log.v("cola", "new acctitem");
   billdb.Acctitem_newitem(text, ExpandableListView
     .getPackedPositionGroup(info.packedPosition));
   updatedisplay();
  }
 };

接着把接口对象通过函数传到B中:

newdialog = new Dialog_edit(this, "请输入新增账目的名称", "",
     mDialogClick_new);
   newdialog.show();

总结:

这样就可以在B中调用接口函数时,其实就是调用的A的实现接口的函数。且能够传递B中的变量给A,接口又可以让别人写,多好啊。

 

是不是人的一个回调列子

Switch.java:  相当于A

public class Switch {
 //一个判断传入参数是不是人的类,我是个机器,本身不知道传入的东西是不是人,我需要提供一个外部接口,帮我判断。
 private String souce;
 private OnJudgeListener mOnJudgeListener; 
 
 public interface OnJudgeListener {
  boolean onJudgeSet(String s);
 }
 
 public Switch(OnJudgeListener onJudgeListener) {
  // TODO Auto-generated constructor stub
  mOnJudgeListener = onJudgeListener;
 }
 
 public void setSource(String souce){
  this.souce = souce;
 }
 
 public void check(){
  System.out.println("checking----");
  if(mOnJudgeListener.onJudgeSet(souce)){
   System.out.println("人");
  } else{
   System.out.println("不是人");
  }
 }
}

 

People.java: 相当于B

public class Person {
 public static void main(String args[]) {
  Switch s = new Switch(new Switch.OnJudgeListener() {
   @Override
   public boolean onJudgeSet(String s) {
    // TODO Auto-generated method stub
    if ("people".equals(s)) {
     return true;
    } else {
     return false;
    }
   }
  });
  s.setSource("people");
  s.check();
  
  s.setSource("fish");
  s.check();
 }
}

 总结2:

B函数没有判断条件‘是不是人 ’的功能,全凭它提供了一个接口来判断,并返回结构供它自己处理。

© 著作权归作者所有

jacky_123
粉丝 3
博文 55
码字总数 26297
作品 0
南通
程序员
私信 提问
读Zepto源码之Callbacks模块

Callbacks 模块并不是必备的模块,其作用是管理回调函数,为 Defferred 模块提供支持,Defferred 模块又为 Ajax 模块的 风格提供支持,接下来很快就会分析到 Ajax模块,在此之前,先看 Call...

sshpp
2017/07/24
0
0
zg手册 之 twisted 开发(2)-- Deferreds 组件

Deferreds 异步回调序列 Deferred 本质上是一个回调函数的集合,twisted 提供了对函数延迟调用的机制。 在 twisted 内部,使用 Deferred 对象管理回调序列。当异步请求结果返回时,使用 Defe...

东昕
2014/06/24
180
0
前端全栈工程化开发专题 — JS中回调函数的深入解读

1、回调函数核心原理分析 js中的定时器及动画 完整版动画库封装 回调函数初步讲解 扩展更多的运动方式(非匀速) options对象参数的应用 ... 什么是回调函数? 把一个函数当做实参值传递给函...

我是家碧
2018/12/13
0
0
是 promise chain 解决了回调地狱,而不是只靠 promise

前言 最近因为对 promise 的状态依赖理解有偏差,导致在开发过程中花费了3个小时的时间才发现错误。感觉浪费时间了,所以结合标准及实践结果对 promise 的状态依赖做了一个总结。 问题代码大...

苏进取
07/11
0
0
nodejs fs模块

fs.open(文件路径,读写标识,[文件mode值,666],回调函数(err,文件句柄fd)); fs.read(文件句柄fd,被写入的buffer,offset,length,position,回调函数(err, bytesRead, buffer)); fs.close(文件句...

r_yaya
2016/01/20
53
0

没有更多内容

加载失败,请刷新页面

加载更多

写的简单sh脚本2

#!/bin/bashexport LANG="en_US.UTF-8"#chmod +x filename 记得给文件加可执行权限#./vsimstart.sh#启动vsim项目echo "start vism"#207------------------------------assets=vsim-a......

hexiaoming123
昨天
4
0
java基础(1)变量和常量

概要和总结: 数据类型图: 基本数据类型:只有基本功能-----保存数据 (4类8种)byte-short-int-long-float-double-char-boolean 引用数据类型:有更多功能,保存数据,处理数据...

煌sir
昨天
5
0
年底了,整理了一份程序员面试必看的文章合集

本系列文章整合了本号发表和转载过的,有关技术招聘干货、笔试面试经验和技巧、简历、招聘等方面的精品文章,希望对想要找工作,以及正在找工作的你,能够有所帮助。 原创面试干货文章 校招季...

Java技术江湖
昨天
4
0
curl 命令行下工作的文件传输工具---应用篇

抓取页面内容到一个文件中 curl -o home.html http://www.sina.com.cn 模拟用户登录 # 此参数相当于设置http头 Authorization:curl --user user:password http://blog.mydomain.com/logi...

edison_kwok
昨天
4
0
JAVA--高级基础开发Cookie实现记住用户名和密码

前端JSP页面: 实现保存用户名和密码<%@ page import="java.net.URLDecoder" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html> <head> <title>Coo......

李文杰-yaya
昨天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部