Callback回调事件介绍

Java或Android中创建异步回调最普遍的做法就是使用listener监听器或者observer观察者模式来解决,listener回调事件通常用于实现一个代码去监听另一个类或方法发生的事情,Android中的监听器listener最流行的莫过于Button按钮的OnClickListener了,下面来开始学习吧!

先来看看Button的onClick事件的代码吧!Button btnExample = (Button) findViewById(R.id.btnExample);

btnExample.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

// Do something here

}

});

如何自定义Android回调事件

我们要做一个类似于Button按钮的回调事件,该如何做呢?先来看自定义listener监听事件的步骤:

1:定义一个接口

2:父类中设置一个成员变量,以及setter方法

3:实现监听事件内部的接口

4:触发Java监听事件

一:定义一个监听事件接口:public class MyCustomObject {

// Step 1 - This interface defines the type of messages I want to communicate to my owner

public interface MyCustomObjectListener {

public void onObjectReady(String title);

public void onDataLoaded(SomeData data);

}

}

二:创建Listener成员变量,代码如下:public class MyCustomObject {

// ...

// Step 2 - This variable represents the listener passed in by the owning object

// The listener must implement the events interface and passes messages up to the parent.

private MyCustomObjectListener listener;

}

在父类中添加setter方法,代码如下:public class MyCustomObject {

// Constructor where listener events are ignored

public MyCustomObject() {

// set null or default listener or accept as argument to constructor

this.listener = null;

}

// Assign the listener implementing events interface that will receive the events

public void setCustomObjectListener(MyCustomObjectListener listener) {

this.listener = listener;

}

}

三:在别的类中实现监听事件内部的接口public class MyParentActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

object.setCustomObjectListener(new MyCustomObject.MyCustomObjectListener() {

@Override

public void onObjectReady(String title) {

// Code to handle object ready

}

@Override

public void onDataLoaded(SomeData data) {

// Code to handle data loaded from network

// Use the data here!

}

});

}

}

四:触发Callback监听事件:public class MyCustomObject {

// Listener defined earlier

public interface MyCustomObjectListener {

public void onObjectReady(String title);

public void onDataLoaded(SomeData data);

}

// Member variable was defined earlier

private MyCustomObjectListener listener;

public MyCustomObject() {

// set null or default listener or accept as argument to constructor

this.listener = null;

loadDataAsync();

}

// ... setter defined here as shown earlier

//假如这是一个网络加载事件

public void loadDataAsync() {

AsyncHttpClient client = new AsyncHttpClient();

client.get("https://mycustomapi.com/data/get.json", new JsonHttpResponseHandler() {

@Override

public void onSuccess(int statusCode, Header[] headers, JSONObject response) {

SomeData data = SomeData.processData(response.get("data"));

// 触发Java监听事件

if (listener != null)

listener.onDataLoaded(data); //

}

});

}

}

总结

会“Android自定义监听器Listener(自定义Java Callback回调事件)”是很有必要的,java监听事件通常用于异步网络加载,Android activity或fragment之间的参数传递,事件回调等,很有必要!

Java接口回调的几种方式

1:通过方法来回调监听事件

2:通过构造器来回调监听事件

3:通过lifecycle生命周期来回调参数

一:通过方法来回调监听事件

下方演示的是通过接口方法来回调listener监听事件,代码如下:// 在父类方法中

childObject.setCustomObjectListener(new MyCustomObject.MyCustomObjectListener() {

@Override

public void onObjectReady(String title) {

// Code to handle object ready

}

});

我们在MyCustomObject父类中是这样定义的,代码:// Inside the child object

private MyCustomObjectListener listener;

// 将接口作为参数传入方法中

public void setCustomObjectListener(MyCustomObjectListener listener) {

this.listener = listener;

}

二:通过构造器来回调监听事件

将接口作为参数放在MyCustomObject父类的构造方法中,代码如下:// Inside the child object

private MyCustomObjectListener listener;

// 将接口放在构造方法中

public MyCustomObject(MyCustomObjectListener listener) {

this.listener = listener;

}

我们可以在创建父类对象时,这样使用构造器回调,代码如下:// Inside the parent object

MyCustomObject object = new MyCustomObject(new MyCustomObject.MyCustomObjectListener() {

@Override

public void onObjectReady(String title) {

// Code to handle object ready

});

});

三:通过lifecycle生命周期来回调接口,一般是在另外一个类中直接实现接口类就行了public class MyListFragment extends Fragment {

private MyCustomObjectListener listener;

@Override

public void onAttach(Context context) {

super.onAttach(context);

if (context instanceof MyCustomObjectListener) {

listener = (MyCustomObjectListener) context;

} else {

throw new ClassCastException(context.toString()

+ " must implement MyListFragment.MyCustomObjectListener");

}

}

}

具体怎么使用生命周期来回调接口,后续小编会制作完整教程供大家使用。

来源网站:太平洋学习网,转载请注明出处:http://www.tpyyes.com/a/android/1066.html

java web自定义监听器_Android自定义监听器Listener(自定义Java Callback回调事件)相关推荐

  1. java web 应用技术与案例教程_《Java Web应用开发技术与案例教程》怎么样_目录_pdf在线阅读 - 课课家教育...

    出版说明 前言 第1章 java Web应用开发技术概述 1.1 Java Web应用开发技术简介 1.1.1 Java Web应用 1.1.2 Java Web应用开发技术 1.2 Java Web ...

  2. 用php web编程作业,代做CSE2ISD作业、代做Web,php程序作业、代写Java/web编程作业、代写C/C++/Java留学生作业...

    代做CSE2ISD作业.代做Web,php程序作业.代写Java/web编程作业.代写C/C++/Java留学生作业 日期:2018-10-08 10:00 CSE2ISD – Information ...

  3. java web 图表控件_2020 最新流行的Java Web报表工具比对

    原标题:2020 最新流行的Java Web报表工具比对 随着信息系统的高速发展,报表平台逐渐成为了信息系统当中最为核心和重要的功能模块. 报表工具有助于将原始数据可视化显示,使决策者或者相关人员能够 ...

  4. [Java Web整合开发王者归来·刘京华] 1、 Java Web开发

    目录: 1.Web技术简介 2.动态网站与静态网站 3.Java Web开发模式 4.JavaScript简介 1.Web技术简介 PS: 最近还有更凶残的技术,即整个操作系统都是基于Web的,如火狐 ...

  5. JAVA web项目报错no sigar-x86-winnt.dll in java.library.path

    最近,在调试一JAVA web项目时,后台报错:no sigar-x86-winnt.dll in java.library.path:提示很明显:就是JAVA运行库缺少sigar-x86-winnt ...

  6. java web前端模版,以Eclipse替核心搭建JAVA WEB开发环境(三)-模板项目Archetype

    以Eclipse为核心搭建JAVA WEB开发环境(三)-模板项目Archetype 本篇介绍创建archetype,用于创建WEB项目的模板. 1.创建一个Dynamic Web Project. ...

  7. java web tcp长连接超时时间_常用java web容器http长连接超时设置

    1.http长连接相关知识 http长连接对我们来说并不陌生,但长连接并不是永远不会关闭.对于HTTP长连接需要注意下面几点:keepalive_timeout指的是web服务器发送完最后一个响应报文 ...

  8. java web 数据验证_kpvalidate开辟验证组件,通用Java Web请求服务器端数据验证组件...

    小菜利用工作之余编写了一款Java小插件,主要是用来验证Web请求的数据,是在服务器端进行验证,不是简单的浏览器端验证. 小菜编写的仅仅是一款非常初级的组件而已,但小菜为它写了详细的说明文档. 简单介 ...

  9. java web 统计在线用户_Javaweb监听器实例之统计在线人数

    本文实例为大家分享了Javaweb统计在线人数示的具体代码,供大家参考,具体内容如下 1. 实现功能 统计在线人数 显示每个人的sessionId.Ip.第一次登录时间 2. 运用监听器种类 Http ...

最新文章

  1. 小评 XenServer 6.0功能
  2. Java-CGLib动态代理
  3. 《赤壁》:吴宇森恶搞三国的经过
  4. druid连接池初始化慢_7、SpringBoot -连接池(Durid)
  5. 【51单片机快速入门指南】9:省电模式(低功耗)
  6. C++---list(列表)模板
  7. Flink_大数据技术之电商用户行为分析
  8. Codeforces Round #468 (Div. 2): D. Peculiar apple-tree(水题)
  9. getBoundingClientRect()来获取页面元素的位置”
  10. C#开发Android应用程序的流程
  11. 语音信号处理:预处理【预加重、分帧、加窗】
  12. 阿里的数据同步神器——Canal
  13. Meterpreter命令详解
  14. web服务器 怎样上传文件,文件上传web服务器
  15. c语言char怎么用?
  16. ”此网站尚未经过身份验证“问题的解决办法
  17. 大学的终结,终结了什么???
  18. 工作流Activiti初体验—流程撤回【二】
  19. R语言之LDA算法应用
  20. KNIME 安装配置

热门文章

  1. 微生物组-宏基因组分析专题研讨会(2022.5)
  2. 作物驯化与人类的生活
  3. 查找字符串末尾含关键字_Excel教程:用find函数带关键字提取杂乱文本
  4. R语言stringr包str_count函数计算字符串匹配个数实战
  5. R语言进行dataframe数据左连接(Left join):使用R原生方法、data.table、dplyr等方案
  6. R语言ggplot2可视化柱状图并自定义柱体的宽度(通过变量指定条形的宽度)实战、条形图并自定义条形的宽度实战
  7. Python为图像添加文本内容(Writing Text on Image)
  8. 影像组学视频学习笔记(31)-柱状图的python实现、Li‘s have a solution and plan.
  9. android 无埋点 简书,无埋点README
  10. python爬虫自学笔记分析解密_Python爬虫自学系列(七) -- 项目实战篇(一)