天天看點

android中的回調

1、引子

android中的回調

btn_rigister.setonclicklistener(new view.onclicklistener() {  

    @override  

    public void onclick(view view) {  

        // todo log in  

    }  

});  

view對外暴露了一個接口onclick

android中的回調

public interface onclicklistener {  

        /** 

         * called when a view has been clicked. 

         * 

         * @param v the view that was clicked. 

         */  

        void onclick(view v);  

我們在用的時候實作具體方法寫了處理時,目前的actvity是沒有對這個方法做任何操作,這個被充實之後的onclick方法被view回調處理!其中一段處理 比如

android中的回調

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, 并在接口中定義一個抽象方法

android中的回調

public interface callback{    

        public abstract void work();    

    }    

【接口對象】在類中定義一個該接口的成員變量

android中的回調

private callback mcallback;    

【設定對象】在類中定義一個公共方法,可以設定這個接口的對象,調用該方法給接口對象變量指派

android中的回調

public void setcallback(callback callback) {    

       this.mcallback = callback;    

   }    

【調用方法】調用接口對象中的方法

android中的回調

public void dowork() {    

        mcallback.work();    

ok,

完整代碼如下

android中的回調

public class employee {    

    /*  

     * 定義回調接口的成員變量  

     */    

    private callback mcallback;    

     * 聲明回調接口  

    public interface callback{    

     * 設定回調接口對象成員變量  

    public void setcallback(callback callback) {    

        this.mcallback = callback;    

     * 調用回調接口對象中的方法  

    public void dowork() {    

}    

然後我們針對去使用就好

android中的回調

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

繼續閱讀