很多人刚接触Callback回调时应该是很懵的。
今天通过这篇文章,让你轻松了解什么是Callback回调。

首先看下官方的解释:

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

回调机制:

⑴定义一个回调函数;
⑵提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者;
⑶当特定的事件或条件发生的时候,调用者使用函数指针调用回调函数对事件进行处理。

回调的通俗解释:简单的来说,就是把你自己包含了电话、QQ、微信的通讯簿交给别人,别人就持有了你的通讯簿。当别人有你需要知道的事情的时候,通过相应的渠道电话、QQ或微信告诉你。这就是回调。

回调的步骤只需4步:
1.定义一个接口类,定义需要的方法。
2.声明一个接口类对象,提供一个设置类对象的方法。
3.创建接口类对象,重写其中的方法,把该类对象,通过对方的方法传递过去,对方就持有了该对象
4.对方通过该对象,调用该类对象重写的方法,把值传递过来,相当于set了一个值过来。

下面用一个例子来说明这4个步骤,我们最常见的给RecyclerView添加点击监听回调事件。

1.定义一个接口类,里面定义需要的方法

 public interface OnItemClickListener {void onItemClick(View view, int position);}

2.需要在Adapter中声明一个OnItemClickListener接口类对象,对外提供一个设置OnItemClickListener对象的方法,相当于set方法。

protected OnItemClickListener mOnItemClickListener;public void setOnItemClickListener(OnItemClickListener listener) {this.mOnItemClickListener = listener;}

3.在Activity中,创建Adapter调用3中的setOnItemClickListener方法,传入OnItemClickListener的实例对象。

mBaseAdapter.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(View view, int position) {//拿到对应的数据,进行处理}});

4.在Adatper中给对应的控件添加监听,然后通过OnItemClickListener实例对象,回调自己里面定义的方法,进行值的传递。

 mConvertView.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {if (mOnItemClickListener != null) {mOnItemClickListener.onItemClick(view,position);}}});

这样就完成了一个完整的回调过程。

是不是很简单!

Android 一篇文章轻松搞懂什么是Callback回调相关推荐

  1. 一篇文章 轻松搞懂 AC自动机

    索引 概念 前后缀匹配 Trie树 AC自动机的实现 初始化 Fail指针的构建 匹配字符串 一名蒟蒻向您问好. 概念 这是 AC自动机,不是自动AC机, 是一个十分常用的多模式字符串匹配算法 (也就 ...

  2. 一篇文章彻底搞懂Android事件分发机制

    本文讲的是一篇文章彻底搞懂Android事件分发机制,在android开发中会经常遇到滑动冲突(比如ScrollView或是SliddingMenu与ListView的嵌套)的问题,需要我们深入的了解 ...

  3. 一篇文章全搞懂!B2B

    作为一名刚入行不久的电商新人,时常被各种专业名词搞的晕头转向,公司开会或者行业交流时候没听懂也只能假装呵呵一笑(话说这种呵呵一笑是什么态度!摔).痛心疾首,小编决定总结近期所有我听过的没听过的互联网专 ...

  4. 目标检测扩(六)一篇文章彻底搞懂目标检测算法中的评估指标计算方法(IoU(交并比)、Precision(精确度)、Recall(召回率)、AP(平均正确率)、mAP(平均类别AP) )

    ​ 基本在目标检测算法中会碰到一些评估指标.常见的指标参数有:IoU(交并比).Precision(精确度).Recall(召回率).AP(平均正确率).mAP(平均类别AP)等.这些评估指标是在评估 ...

  5. mysql snowflake_一篇文章彻底搞懂snowflake算法及百度美团的最佳实践

    写在前面的话 一提到分布式ID自动生成方案,大家肯定都非常熟悉,并且立即能说出自家拿手的几种方案,确实,ID作为系统数据的重要标识,重要性不言而喻,而各种方案也是历经多代优化,请允许我用这个视角对分布 ...

  6. 八、一篇文章快速搞懂MySQL 常见的数据类型(整型、小数、字符型、日期型详解)

    常见的数据类型 1.数值型: 整型 小数: 定点数 浮点数 2.字符型: 较短的文本:char.varchar 较长的文本:text.blob(较长的二进制数据) 3.日期型: 一.整型 1)分类: ...

  7. 一篇文章彻底搞懂“分布式事务”

    在如今的分布式盛行的时代,分布式事务永远都是绕不开的一个话题,今天就谈谈分布式事务相关的一致性与实战解决方案. 01 为什么需要分布式事务 由于近十年互联网的发展非常迅速,很多网站的访问越来越大,集中 ...

  8. 一篇文章快速搞懂C++生成随机数

    使用rand()函数 头文件<stdlib.h> 如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间. ...

  9. 一篇文章快速搞懂排序算法(含实现源码)

    十大排序算法函数声明 时间复杂度表 主函数 #include<iostream> #include<cstdlib> #include<srand> using n ...

  10. 一篇文章快速搞懂十大排序算法(C++实现源码)

    十大排序算法函数声明 时间复杂度表 主函数 #include<iostream> using namespace std;void BubbleSort(int length, int a ...

最新文章

  1. 达摩院发布2022十大科技趋势!
  2. pandas中dataframe索引排序实战:pandas中dataframe索引降序排序、pandas中dataframe索引升序排序
  3. 处理表格数据时,去除表头两种写法,jquery 删除表头之外的数据
  4. chown chmod usermod命令的使用
  5. 织梦地方php分类信息,织梦标签:infolink 分类信息地区与类型快捷链接
  6. 嵌入式web服务器预研报告(转)
  7. 通过Dapr实现一个简单的基于.net的微服务电商系统(六)——一步一步教你如何撸Dapr之Actor服务...
  8. paip.编程语言到底有没有优劣之分优秀之分
  9. 重定向和请求转发详解
  10. 聚合支付系统如何开发?
  11. 解决AndroidStudio Locat侧边栏消失
  12. 苹果设邮箱的126服务器,Mac系统中的邮箱创建126邮箱帐户的方法
  13. 瑞友云电脑与政府行业
  14. 学python的亲身经历_你要偷偷的学Python,然后惊呆所有人
  15. notebook pip install 只有星号_世界上最小的船,只有四个红细胞那么长
  16. Treats for the Cows
  17. msa2000映射到服务器,MSA2000命令行配置信息
  18. linux ubantu / linux mint安装howdy人脸识别
  19. Java中CAS操作
  20. PCL报错:Project ‘pcl_conversions‘ (pcl_ros) specifies ‘xxx‘ as an include dir, not found.

热门文章

  1. 如何给PDF加水印,PDF加水印的快速方法
  2. QT-700多种实用好看的图标,直接拿来用
  3. 银行排队问题(详解队列)
  4. 曲线拟合——最小二乘法( Ordinary Least Square,OLS)
  5. 油猴【QQ空间自动点赞-模拟点击】
  6. 宏电GPRS DTU H7210调试报告之DEMO测试
  7. CAN报文协议教程|CAN报文分析
  8. 微信聊天功能软件测试用例,软件测试用例实例之常见功能测试点
  9. java cad polyline,为AUTOCAD编写系列批量处理程序
  10. Mac修改hosts文件 配置一些IP地址和域名的映射