解决问题
举这样一个例子,你的老板让你帮他抢一张周杰伦演唱会的门票,但是你现在屁股后面还有一大堆事情要做,你不可能去售票处一直等着排队买票,所以这个时候你就委托一个人去给你买票,等他买好了票他通知你来取票就可以了。
在这个例子当中你就是用户,你的委托人告诉你票买好了,就是回调,简单的来讲就是你把一个任务交给其他人去做,当任务完成的时候他告诉你,这个过程就叫做回调
回调主要用于处理异步消息传递
结合代码讲解
接口类,用于定义
public interface CallBack
{
public void giveMe(int result);
}
具体实现类
public class Buyer
{
CallBack callBack;
public void toldBuyer(CallBack callback){
this.callback = callback;
}
public void doThings(){
//巴拉巴拉,做他该做的事情去,
noticeMe(result);
}
private void noticeMe(T result)
{
callBack.giveMe(result);
}
}
使用的类
public class Me
{
public void callHelp ()
{
new Buyer().toldBuyer(new CallBack(){
@Override
public void giveMe( int result)
{
System.out.println(name + "求助小红计算:" + a + " + " + b + " = " + result);
}
});
}
}
在这个例子当中,我是使用者,Callback相当于是我要做的事情,Buyer是我委托给的那个人
我要做的事情就是通过匿名内部类CallBack的方式把buyer买到票之后要干的事情告诉他,然后buyer里存了一个CallBack的对象,这个对象里有我要让他干什么,之后当buyer做完事情之后,调用他的noticeMe方法,来通知我,他做完了,并且这个时候采取做我让他做的事情,这样就不需要我去傻等着了,
结合OnClickListener讲解
下面这个类相当于上面的CallBack这个类,只存着在被点击之后要干什么
public interface OnClickListener {
/**
* Called when a view has been clicked.
*
* @param v The view that was clicked.
*/
void onClick(View v);
}
下面这个是具体使用的时候相当于上面的Me,
public class TestA implements View.OnClickListener {
button.setOnClickListener(this);
/**
* Called when a view has been clicked.
*
* @param v The view that was clicked.
*/
@Override
public void onClick(View v) {//这里相当于我上面的giveMe方法
switch (v.getId()){
case R.id.test1:
//BALBALA
break;
case
...
}
}
setOnClickListener方法相当于上面的toldBuyer方法,告诉他他要做什么,这里省略了监听的代码,监听代码相当于上面的buy部分的代码,并且省略了,回调的那个方法
public void setOnClickListener(OnClickListener l) {
if (!isClickable()) {
setClickable(true);
}
getListenerInfo().mOnClickListener = l;//一个view组件含多个Listener监听器,这个只赋值click,其他的还有OnFocusChangeListener、OnLongClickListener等
}
网友评论