Callback回调事件介绍
Java或Android中创建异步回调最普遍的做法就是使用listener监听器或者observer观察者模式来解决,listener回调事件通常用于实现一个代码去监听另一个类或方法发生的事情,Android中的监听器listener最流行的莫过于Button按钮的OnClickListener了,下面来开始学习吧!
先来看看Button的onClick事件的代码吧!ButtonbtnExample=(Button)findViewById(R.id.btnExample);
btnExample.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
//Dosomethinghere
}
});
如何自定义Android回调事件
我们要做一个类似于Button按钮的回调事件,该如何做呢?先来看自定义listener监听事件的步骤:
1:定义一个接口
2:父类中设置一个成员变量,以及setter方法
3:实现监听事件内部的接口
4:触发Java监听事件
一:定义一个监听事件接口:publicclassMyCustomObject{
//Step1-ThisinterfacedefinesthetypeofmessagesIwanttocommunicatetomyowner
publicinterfaceMyCustomObjectListener{
publicvoidonObjectReady(Stringtitle);
publicvoidonDataLoaded(SomeDatadata);
}
}
二:创建Listener成员变量,代码如下:publicclassMyCustomObject{
//...
//Step2-Thisvariablerepresentsthelistenerpassedinbytheowningobject
//Thelistenermustimplementtheeventsinterfaceandpassesmessagesuptotheparent.
privateMyCustomObjectListenerlistener;
}
在父类中添加setter方法,代码如下:publicclassMyCustomObject{
//Constructorwherelistenereventsareignored
publicMyCustomObject(){
//setnullordefaultlisteneroracceptasargumenttoconstructor
this.listener=null;
}
//Assignthelistenerimplementingeventsinterfacethatwillreceivetheevents
publicvoidsetCustomObjectListener(MyCustomObjectListenerlistener){
this.listener=listener;
}
}
三:在别的类中实现监听事件内部的接口publicclassMyParentActivityextendsActivity{
@Override
protectedvoidonCreate(BundlesavedInstanceState){
object.setCustomObjectListener(newMyCustomObject.MyCustomObjectListener(){
@Override
publicvoidonObjectReady(Stringtitle){
//Codetohandleobjectready
}
@Override
publicvoidonDataLoaded(SomeDatadata){
//Codetohandledataloadedfromnetwork
//Usethedatahere!
}
});
}
}
四:触发Callback监听事件:publicclassMyCustomObject{
//Listenerdefinedearlier
publicinterfaceMyCustomObjectListener{
publicvoidonObjectReady(Stringtitle);
publicvoidonDataLoaded(SomeDatadata);
}
//Membervariablewasdefinedearlier
privateMyCustomObjectListenerlistener;
publicMyCustomObject(){
//setnullordefaultlisteneroracceptasargumenttoconstructor
this.listener=null;
loadDataAsync();
}
//...setterdefinedhereasshownearlier
//假如这是一个网络加载事件
publicvoidloadDataAsync(){
AsyncHttpClientclient=newAsyncHttpClient();
client.get("/data/get.json",newJsonHttpResponseHandler(){
@Override
publicvoidonSuccess(intstatusCode,Header[]headers,JSONObjectresponse){
SomeDatadata=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(newMyCustomObject.MyCustomObjectListener(){
@Override
publicvoidonObjectReady(Stringtitle){
//Codetohandleobjectready
}
});
我们在MyCustomObject父类中是这样定义的,代码://Insidethechildobject
privateMyCustomObjectListenerlistener;
//将接口作为参数传入方法中
publicvoidsetCustomObjectListener(MyCustomObjectListenerlistener){
this.listener=listener;
}
二:通过构造器来回调监听事件
将接口作为参数放在MyCustomObject父类的构造方法中,代码如下://Insidethechildobject
privateMyCustomObjectListenerlistener;
//将接口放在构造方法中
publicMyCustomObject(MyCustomObjectListenerlistener){
this.listener=listener;
}
我们可以在创建父类对象时,这样使用构造器回调,代码如下://Insidetheparentobject
MyCustomObjectobject=newMyCustomObject(newMyCustomObject.MyCustomObjectListener(){
@Override
publicvoidonObjectReady(Stringtitle){
//Codetohandleobjectready
});
});
三:通过lifecycle生命周期来回调接口,一般是在另外一个类中直接实现接口类就行了publicclassMyListFragmentextendsFragment{
privateMyCustomObjectListenerlistener;
@Override
publicvoidonAttach(Contextcontext){
super.onAttach(context);
if(contextinstanceofMyCustomObjectListener){
listener=(MyCustomObjectListener)context;
}else{
thrownewClassCastException(context.toString()
+"mustimplementMyListFragment.MyCustomObjectListener");
}
}
}
具体怎么使用生命周期来回调接口,后续小编会制作完整教程供大家使用。
来源网站:太平洋学习网,转载请注明出处:/a/android/1066.html