编程上,一般使用一个库或类时,是程序员去调用事先定义好的API,这个叫Call.有的时候,这样不能满足需要,需要程序员注册自己的程序(比如一个对象),然后让事先定义好的API在合适的时候来调用程序员自己的方法,这叫Callback.
回调,是一种双向调用模式,被调用方在接口被调用时也会调用对方的接口。
接口回调, 就是某个类的某个函数,接收一个接口作为参数(或者直接把该接口作为field), 那么就可以在这个函数中调用接口里面的方法了,称为回调 。而接口的实现可以千变万化,将不同的接口的实现类传入,就可实现不同的功能
设置
// 1.定义接口,方法
public interface OnTopBarListener {
void onClick();
}
// 2.设置使用方法
public void setOnTopBarListener(OnTopBarListener onTopBarListener){
mOnTopBarListener = onTopBarListener;
}
// 3.真正起作用,处理事情的地方。可以用其他的监听器框架
@Override
public void setOnClickListener(OnClickListener l) {
super.setOnClickListener(l);
// 这个地方的方法,是留着将来什么地方调用,写社么东西,他就执行什么
mOnTopBarListener.onClick();
}
调用
TopBar topBar=new TopBar(MainActivity.this);
// 调用自制的监听器,很像系统监听器吧。
topBar.setOnTopBarListener(new TopBar.OnTopBarListener() {
@Override
public void onClick() {
Toast.makeText(MainActivity.this,"点击",Toast.LENGTH_SHORT).show();
}
});
程序是这样流转的,
从调用处出发,新建TopBar类的对象,调用setOnTopBarListener方法,它需要一个参数是OnTopBarListener接口,那新建一个接口,需要实现onClick方法。
被调用处的,setOnTopBarListener方法,将传进来的参数一个实例化的子类,赋值给被调用类的全局变量 mOnTopBarListener。然后被调用类的setOnClickListener的方法体是,mTopBarListener.onClick()方法,全局变量mOnTopBarListener已经从空变成了调用处实例化的OnTopBarListener对象。所以此处执行的方法,就变成了调用处onClick()方法。
上面全部具体的代码,在博客自定义View及其监听事件,可以移步哪里查看。
可能还有理解不到位的地方,欢迎大神指导,欢迎留言