java web自定义监听器_Android自定义监听器Listener(自定义Java Callback回调事件)
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回调事件)相关推荐
- 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 ...
- 用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 ...
- java web 图表控件_2020 最新流行的Java Web报表工具比对
原标题:2020 最新流行的Java Web报表工具比对 随着信息系统的高速发展,报表平台逐渐成为了信息系统当中最为核心和重要的功能模块. 报表工具有助于将原始数据可视化显示,使决策者或者相关人员能够 ...
- [Java Web整合开发王者归来·刘京华] 1、 Java Web开发
目录: 1.Web技术简介 2.动态网站与静态网站 3.Java Web开发模式 4.JavaScript简介 1.Web技术简介 PS: 最近还有更凶残的技术,即整个操作系统都是基于Web的,如火狐 ...
- 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 ...
- java web前端模版,以Eclipse替核心搭建JAVA WEB开发环境(三)-模板项目Archetype
以Eclipse为核心搭建JAVA WEB开发环境(三)-模板项目Archetype 本篇介绍创建archetype,用于创建WEB项目的模板. 1.创建一个Dynamic Web Project. ...
- java web tcp长连接超时时间_常用java web容器http长连接超时设置
1.http长连接相关知识 http长连接对我们来说并不陌生,但长连接并不是永远不会关闭.对于HTTP长连接需要注意下面几点:keepalive_timeout指的是web服务器发送完最后一个响应报文 ...
- java web 数据验证_kpvalidate开辟验证组件,通用Java Web请求服务器端数据验证组件...
小菜利用工作之余编写了一款Java小插件,主要是用来验证Web请求的数据,是在服务器端进行验证,不是简单的浏览器端验证. 小菜编写的仅仅是一款非常初级的组件而已,但小菜为它写了详细的说明文档. 简单介 ...
- java web 统计在线用户_Javaweb监听器实例之统计在线人数
本文实例为大家分享了Javaweb统计在线人数示的具体代码,供大家参考,具体内容如下 1. 实现功能 统计在线人数 显示每个人的sessionId.Ip.第一次登录时间 2. 运用监听器种类 Http ...
最新文章
- 小评 XenServer 6.0功能
- Java-CGLib动态代理
- 《赤壁》:吴宇森恶搞三国的经过
- druid连接池初始化慢_7、SpringBoot -连接池(Durid)
- 【51单片机快速入门指南】9:省电模式(低功耗)
- C++---list(列表)模板
- Flink_大数据技术之电商用户行为分析
- Codeforces Round #468 (Div. 2): D. Peculiar apple-tree(水题)
- getBoundingClientRect()来获取页面元素的位置”
- C#开发Android应用程序的流程
- 语音信号处理:预处理【预加重、分帧、加窗】
- 阿里的数据同步神器——Canal
- Meterpreter命令详解
- web服务器 怎样上传文件,文件上传web服务器
- c语言char怎么用?
- ”此网站尚未经过身份验证“问题的解决办法
- 大学的终结,终结了什么???
- 工作流Activiti初体验—流程撤回【二】
- R语言之LDA算法应用
- KNIME 安装配置
热门文章
- 微生物组-宏基因组分析专题研讨会(2022.5)
- 作物驯化与人类的生活
- 查找字符串末尾含关键字_Excel教程:用find函数带关键字提取杂乱文本
- R语言stringr包str_count函数计算字符串匹配个数实战
- R语言进行dataframe数据左连接(Left join):使用R原生方法、data.table、dplyr等方案
- R语言ggplot2可视化柱状图并自定义柱体的宽度(通过变量指定条形的宽度)实战、条形图并自定义条形的宽度实战
- Python为图像添加文本内容(Writing Text on Image)
- 影像组学视频学习笔记(31)-柱状图的python实现、Li‘s have a solution and plan.
- android 无埋点 简书,无埋点README
- python爬虫自学笔记分析解密_Python爬虫自学系列(七) -- 项目实战篇(一)