Android回调详解
很多时候开发遇到一些Ui更新 网络数据获取,或者方法方法传递的时候会借助回调函数,那么什么是回调函数 百度百科是这么解释的 转载请标注出处 http://blog.csdn.net/sk719887916/article/details/40543483
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
主页君:这只手在c函数里 在java里就抛弃了指针这些说法 只有引用地址一说
1机制编辑
意义编辑
所谓回调,就是客户程序Client调用服务程序sever中的某个函数A,然后sever又在某个时候反过来调用Client中的早就定义或者提供的函数B,对于sever来说,这个B()便叫做回调函数。一般说来,Client不会自己调用B,Client提供B的目的就是让sever来调用它。由于sever并不知道Client提供的B到底是啥东东,所以sever会约定B的接口规范(函数原型),然后由Client提前通过sever的一个函数R告诉sever自己将要使用B函数,这个过程称为回调函数的注册,R称为注册函数。Web
Service以及Java的RMI都用到回调机制,可以访问远程服务器程序。
看了之后大家可能大概有点眉目 但是还是不是很清楚
但是安卓的回调和上诉描述有些许区别 最常见的就是安卓里面的点击事件 其实就是一个回调接口 ,他和代理有区别的。
我们下看下安卓 button的OnClickListener()源码
public void setOnClickListener(OnClickListener l) {
mListViewListener = l;
}
public interface OnClickListener {
public void onClick(View view);
}
这段关键代码 可以看出 其实在view的OnClickListener就是一个接口对象 里面onClick(V)函数,我们再activity里其实就是去实现这个接口然后再去重写onClick()方法
这样其实我们activity就是在调用OnClickListener的方法 对于OnClickListener来说他是提供接口原型让activity去调用 其实就是在操作原型方法,到这里大家都该清楚了吧
就是以主页君的理解回调就是A埋了地雷 ,留了引线 有一天B踩上了 前提B并不知道有没有地雷 结果A被炸飞了 ,A其实本以为去伤害B 最后反倒伤害了自己。说到这里其实很多人认为进而代理相似 代理就是角色的反转 并不关心结果 同样A埋了雷 上去炸C 但是他没有引线
只有B有引线 他就让B做踩雷引线工作 ,结果C被炸了 ,做到了A炸C事情 同样C也可以通过B炸A。具体代理细节在此不描述 有兴趣的话去看下菜鸟哥的的一本书《大话设计模式》、。
那既然安卓已经定义了自带的回调 那么我们怎么有必要自己去写回调嘛 ?答案是必须的要自己写得
请看下面一个需求
比如有个需求是Listview里面有个点击事件需要操作activity里非listview里面的view 那么你肯定想 这么简单直接在activity去实现OnClickListener操作view.
但是有的时候我们需要adaper里面传值出来 或者直接让Adaper要实现某个方法, 但是只能activity才拥有这段方法的代码,这时候回调就来了 之前看过微信聊天的的部分源码 看到里面那就用到了回调
adapter
/**
*
*
* @author skay
*/
public interface ReplayOnclickListener {
public void onReplayClick(ReplyBean q, View v);
public void onLongPressMine(ReplyBean q, View v);
public void onLongPressOther(ReplyBean q, View v);
public void onClickOtherView(ReplyBean q, View v);
}
<span style="font-size:24px;">Activity</span>
public class chatlActivity extends BaseActivity implements
ReplayOnclickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
adapter = new ChatlistAdapter(this);
adapter.setReplayOnclickListener(this);//这是需要在adapter里面定义setReplayOnclickListener()方法 需要要执行者(chatlActivity )注入进去
}
@Override
public void onReplayClick(Question q, View v) {
ReplayPopupWindowUtil.getInstance().showShareAndStore(this, v);
//此方法是弹出复制PopupWindow的
}
@Override
public void onLongPressMine(ReplyBean q, View v) {
}
@Override
public void onClickOtherView(ReplyBean q, View v) {
//这里你随便可以做操作 比如你调到另一页面然后再跳回来 或者你网络获取数据让这个函数调用也可以 只是一个简单的例子
}
}
onReplayClick() 就是所谓的原型
Android回调详解的更多相关文章
- Android ActionBar详解
Android ActionBar详解 分类: Android2014-04-30 15:23 1094人阅读 评论(0) 收藏 举报 androidActionBar 目录(?)[+] 第4 ...
- Android菜单详解(一)——理解android中的Menu
前言 今天看了pro android 3中menu这一章,对Android的整个menu体系有了进一步的了解,故整理下笔记与大家分享. PS:强烈推荐<Pro Android 3>,是我至 ...
- 【转】Android菜单详解——理解android中的Menu--不错
原文网址:http://www.cnblogs.com/qingblog/archive/2012/06/08/2541709.html 前言 今天看了pro android 3中menu这一章,对A ...
- Android Notification 详解(一)——基本操作
Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...
- Android Notification 详解——基本操作
Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...
- Android 签名详解
Android 签名详解 AndroidOPhoneAnt设计模式Eclipse 在Android 系统中,所有安装 到 系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程 ...
- Android编译系统详解(一)
++++++++++++++++++++++++++++++++++++++++++ 本文系本站原创,欢迎转载! 转载请注明出处: http://blog.csdn.net/mr_raptor/art ...
- Android布局详解之一:FrameLayout
原创文章,如有转载,请注明出处:http://blog.csdn.net/yihui823/article/details/6702273 FrameLayout是最简单的布局了.所有放在布局里的 ...
- 【整理修订】Android.mk详解
Android.mk详解 1. Android.mk 的应用范围 Android.mk文件是GNU Makefile的一小部分,它用来对Android程序进行编译. 一个Android.mk文件可以编 ...
随机推荐
- 详解EBS接口开发之库存事务处理采购接收和退货
(一)接收&退货常用标准表简介 1.1 常用标准表 如下表中列出了与采购接收&退货导入相关的表和说明: 表名 说明 其他信息 RCV_TRANSACTIONS 采购接收事务表 事务 ...
- linux简单命常用令
Linux常用命令总结 切换:cd tmp cd/tmp/yun cd 切换到host目录 cd .. 显示:ll Top显示系统情况 Netstat显示网络情况 Ifconfig显示网络配置 Mor ...
- Servlet之Response对象
下面的方法可用于在 Servlet 程序中设置 HTTP 响应报头.这些方法通过HttpServletResponse 对象可用. 1 String encodeRedirectURL(Stri ...
- 带吸附效果的ViewPager(二)
上篇实现了一个简单的吸附效果,那么这篇我们来实现上篇中所示的360软件详情页(带viewpager)的效果!先来参观下本篇所实现的效果图: 了解了上一篇的实现过程,那么本篇的效果无非是修改一下布局,将 ...
- 与信号相关的linux系统编程API
1. kill(pid_t pid, int sig); //给指定的进程发送sig信号 raise(int sig); //给当前进程发送sig信号2. 处理指定的信号 typedef v ...
- Git Bash+EGit在项目中配合使用最常用方法总结(根据场景使用)
最近在项目中使用Git进行代码管理,之前一直用SVN进行管理,现在谈一谈Git在项目中如何与EGit插件配合使用,高效同步开发. 使用过SVN一段时间的人,初识Git一定感觉很别扭,发现会遇到各种各样 ...
- 精通CSS+DIV网页样式与布局--设置表单和表格
表格和表单是网页中非常重要的两个元素,在上篇博客中,我们简单的介绍了CSS的页面背景设置,今天小编继续来介绍CSS的相关知识,在我们的CSS中如何设置表格和表单,首先,来看一张思维导图,通过图简单的预 ...
- Linux下配置Tomcat
***安装*** 安装JDK chmod a+x jdk-1_5_0_06-linux-i586-rpm.bin ./jdk-1_5_0_06-linux-i586-rpm.bin 敲几次空格就O ...
- Torch的安装和学习
Long long ago, 就已经安装好Torch,这里再记录一下.Torch是Facebook开发的用于AI的科学计算框架,可广泛运用于机器学习的很多算法.相比Caffe,其接口运用更加方便,使用 ...
- mysql删除重复数据只保留一条
mysql删除重复数据只保留一条 新建一张测试表: CREATE TABLE `book` ( `id` char(32) NOT NULL DEFAULT '', `name` varchar(10 ...