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自定义表单验证规则教程

