1、引子
btn_rigister.setonclicklistener(new view.onclicklistener() {
@override
public void onclick(view view) {
// todo log in
}
});
view对外暴露了一个接口onclick
public interface onclicklistener {
/**
* called when a view has been clicked.
*
* @param v the view that was clicked.
*/
void onclick(view v);
我们在用的时候实现具体方法写了处理时,当前的actvity是没有对这个方法做任何操作,这个被充实之后的onclick方法被view回调处理!其中一段处理 比如
public boolean callonclick() {
listenerinfo li = mlistenerinfo;
if (li != null && li.monclicklistener != null) {
li.monclicklistener.onclick(this);
return true;
}
return false;
具体可以阅读view.java
2、什么是回调
回调其实是一种双向调用模式,也就说调用方在接口被调用时也会调用对方的接口,听起来就很拗口,翻译翻译就是“实现了抽象类/接口 的实例实现了父类的提供的抽象方法,后,将该方法交还给父类来处理”,口诀念3遍,可以体会到其中的内涵了没?
主要要弄清楚一点,实现方法交还给提供接口的父类处理!
3、为什么要用回调
比如view具有被点击的通性,但是每个点击又会产生不一样的事件处理一样,因此android对外暴露一个接口有个onclick方法,你需要处理啥你就写啥,view只会调用这个方法,具体怎么处理你已经自己为不同的点击事件做了处理了。
4、如何写
一个很好的小栗子
【定义接口】 在类中定义一个interface, 并在接口中定义一个抽象方法
public interface callback{
public abstract void work();
}
【接口对象】在类中定义一个该接口的成员变量
private callback mcallback;
【设置对象】在类中定义一个公共方法,可以设置这个接口的对象,调用该方法给接口对象变量赋值
public void setcallback(callback callback) {
this.mcallback = callback;
}
【调用方法】调用接口对象中的方法
public void dowork() {
mcallback.work();
ok,
完整代码如下
public class employee {
/*
* 定义回调接口的成员变量
*/
private callback mcallback;
* 声明回调接口
public interface callback{
* 设置回调接口对象成员变量
public void setcallback(callback callback) {
this.mcallback = callback;
* 调用回调接口对象中的方法
public void dowork() {
}
然后我们针对去使用就好
public class boss {
private employee employee;
* 为employee设置回调函数, 在这里定义具体的回调方法
public void setcallback() {
employee.setcallback(new employee.callback() {
@override
public void work() {
system.out.println("work");
}
});
}
转自:http://blog.csdn.net/xsf50717/article/details/50520462