全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android  回调详解及简单实例

Android  回调

前言:

Android中的回调最经典的就是点击事件设置监听(一般通过switch(v.getId()))这里写个最基本的

btn_rigister.setOnClickListener(new View.OnClickListener() { 
  @Override 
  public void onClick(View view) { 
    // TODO log in 
  } 
}); 

view对外暴露了一个接口onClick

public interface OnClickListener { 
    /** 
     * Called when a view has been clicked. 
     * 
     * @param v The view that was clicked. 
     */ 
    void onClick(View v); 
  } 

我们在用的时候实现具体方法写了处理时,当前的Actvity是没有对这个方法做任何操作,这个被充实之后的onClick方法被view回调处理!其中一段处理 比如

public boolean callOnClick() { 
    ListenerInfo li = mListenerInfo; 
    if (li != null && li.mOnClickListener != null) { 
      li.mOnClickListener.onClick(this); 
      return true; 
    } 
    return false; 
  } 

具体可以阅读View.java

2、什么是回调

回调其实是一种双向调用模式,也就说调用方在接口被调用时也会调用对方的接口,听起来就很拗口,翻译翻译就是“实现了抽象类/接口 的实例实现了父类的提供的抽象方法,后,将该方法交还给父类来处理”,口诀念3遍,可以体会到其中的内涵了没?

主要要弄清楚一点,实现方法交还给提供接口的父类处理!

3、为什么要用回调

这里体现了Java面向对象的“万事万物皆为对象”,我们需要将普通物体的特性抽象出来,共性之中又有特性,每个不同的特性就需要交给特定的情况处理,通过暴露接口方法可以减少很多重复,代码更加优雅。
比如view具有被点击的通性,但是每个点击又会产生不一样的事件处理一样,因此android对外暴露一个接口有个onClick方法,你需要处理啥你就写啥,view只会调用这个方法,具体怎么处理你已经自己为不同的点击事件做了处理了。

4、如何写

一个很好的小栗子

【定义接口】 在类中定义一个Interface, 并在接口中定义一个抽象方法

public interface Callback{  
    public abstract void work();  
  }  

【接口对象】在类中定义一个该接口的成员变量

private Callback mCallback;  

 【设置对象】在类中定义一个公共方法,可以设置这个接口的对象,调用该方法给接口对象变量赋值

public void setCallback(Callback callback) {  
    this.mCallback = callback;  
  }  

【调用方法】调用接口对象中的方法

public void doWork() {  
    mCallback.work();  
  }  

ok,

完整代码如下

public class Employee {  
  /* 
   * 定义回调接口的成员变量 
   */  
  private Callback mCallback;  
  /* 
   * 声明回调接口 
   */  
  public interface Callback{  
    public abstract void work();  
  }  
  /* 
   * 设置回调接口对象成员变量 
   */  
  public void setCallback(Callback callback) {  
    this.mCallback = callback;  
  }  
  /* 
   * 调用回调接口对象中的方法 
   */  
  public void doWork() {  
    mCallback.work();  
  }  
}  

然后我们针对去使用就好

public class Boss {  
  private Employee employee;  
  /* 
   * 为Employee设置回调函数, 在这里定义具体的回调方法 
   */  
  public void setCallback() {  
    employee.setCallback(new Employee.Callback() {  
      @Override  
      public void work() {  
        System.out.println("work");  
      }  
    });  
  }  
}  

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Android  # 回调  # 回调详解  # 回调实例  # Android中Fragment多层嵌套时onActivityResult无法正确回调问题的解决方法  # Android 的回调事件详解  # Android异步回调中的UI同步性问题分析  # Android的Fragment的生命周期各状态和回调函数使用  # 深入浅析Android接口回调机制  # 理解Android中Activity的方法回调  # android自定义控件和自定义回调函数步骤示例  # 详细介绍Android中回调函数机制  # Android中回调接口的使用介绍  # 基于Android中Webview使用自定义的javascript进行回调的问题详解  # 类中  # 象中  # 实现了  # 在这里  # 很好  # 是一种  # 也会  # 有个  # 就好  # 又有  # 并在  # 只会  # 希望能  # 要用  # 写了  # 就说  # 你已经  # 又会  # 体会到 


相关文章: 如何快速搭建响应式可视化网站?  建站之星如何通过成品分离优化网站效率?  Python文件管理规范_工程实践说明【指导】  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  如何选择适合PHP云建站的开源框架?  c# 服务器GC和工作站GC的区别和设置  如何通过宝塔面板实现本地网站访问?  南宁网站建设制作定制,南宁网站建设可以定制吗?  如何在腾讯云免费申请建站?  如何通过二级域名建站提升品牌影响力?  网站制作价目表怎么做,珍爱网婚介费用多少?  如何通过虚拟主机快速搭建个人网站?  小程序网站制作需要准备什么资料,如何制作小程序?  婚礼视频制作网站,学习*后期制作的网站有哪些?  C#如何使用XPathNavigator高效查询XML  GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?  成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?  上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?  如何用PHP快速搭建CMS系统?  建站之星如何优化SEO以实现高效排名?  Android滚轮选择时间控件使用详解  网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?  建站VPS选购需注意哪些关键参数?  如何在云主机上快速搭建多站点网站?  如何通过免费商城建站系统源码自定义网站主题与功能?  建站之星客服服务时间及联系方式如何?  如何获取PHP WAP自助建站系统源码?  动图在线制作网站有哪些,滑动动图图集怎么做?  整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?  开心动漫网站制作软件下载,十分开心动画为何停播?  建站之星安装提示数据库无法连接如何解决?  ,南京靠谱的征婚网站?  济南网站制作的价格,历城一职专官方网站?  外贸公司网站制作哪家好,maersk船公司官网?  如何确认建站备案号应放置的具体位置?  个人摄影网站制作流程,摄影爱好者都去什么网站?  如何快速搭建FTP站点实现文件共享?  如何快速搭建个人网站并优化SEO?  如何选择香港主机高效搭建外贸独立站?  制作网站的模板软件,网站怎么建设?  如何在橙子建站上传落地页?操作指南详解  ,购物网站怎么盈利呢?  ,有什么在线背英语单词效率比较高的网站?  定制建站价位费用解析与套餐推荐全攻略  想学网站制作怎么学,建立一个网站要花费多少?  Bpmn 2.0的XML文件怎么画流程图  建站之星展会模版如何一键下载生成?  南平网站制作公司,2025年南平市事业单位报名时间?  制作网站公司那家好,网络公司是做什么的?  网站好制作吗知乎,网站开发好学吗?有什么技巧? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。