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