Android  回调详解及简单实例

发布时间 - 2026-01-10 22:33:09    点击率:

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进行回调的问题详解  # 类中  # 象中  # 实现了  # 在这里  # 很好  # 是一种  # 也会  # 有个  # 就好  # 又有  # 并在  # 只会  # 希望能  # 要用  # 写了  # 就说  # 你已经  # 又会  # 体会到 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 手机网站制作与建设方案,手机网站如何建设?  高端云建站费用究竟需要多少预算?  Laravel如何使用Vite进行前端资源打包?(配置示例)  简单实现Android文件上传  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  Laravel如何实现多对多模型关联?(Eloquent教程)  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何快速搭建自助建站会员专属系统?  黑客如何利用漏洞与弱口令入侵网站服务器?  JavaScript中的标签模板是什么_它如何扩展字符串功能  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  Angular 表单中正确绑定输入值以确保提交与验证正常工作  JavaScript如何实现音频处理_Web Audio API如何工作?  如何在 Pandas 中基于一列条件计算另一列的分组均值  如何在万网利用已有域名快速建站?  如何挑选最适合建站的高性能VPS主机?  如何在橙子建站中快速调整背景颜色?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  利用python获取某年中每个月的第一天和最后一天  Python函数文档自动校验_规范解析【教程】  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  如何快速搭建高效WAP手机网站吸引移动用户?  微信小程序 五星评分(包括半颗星评分)实例代码  教学论文网站制作软件有哪些,写论文用什么软件 ?  Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区  Linux安全能力提升路径_长期防护思维说明【指导】  Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  js实现获取鼠标当前的位置  Thinkphp 中 distinct 的用法解析  如何快速完成中国万网建站详细流程?  如何在万网自助建站中设置域名及备案?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  Laravel如何发送系统通知?(Notification渠道示例)  Laravel如何使用Service Container和依赖注入?(代码示例)  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  如何用虚拟主机快速搭建网站?详细步骤解析  如何用低价快速搭建高质量网站?  夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化  python中快速进行多个字符替换的方法小结  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程