Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android中的回調

android中的回調

編輯:關於Android編程

1、引子

android中的回調最經典的就是點擊事件設置監聽(一般通過switch(v.getId()))這裡寫個最基本的

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、為什麼要用回調

這裡體現了java面向對象的“萬事萬物皆為對象”,我們需要將普通物體的特性抽象出來,共性之中又有特性,每個不同的特性就需要交給特定的情況處理,通過暴露接口方法可以減少很多重復,代碼更加優雅。

比如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 abstract void work();  
        }  
        /* 
         * 設置回調接口對象成員變量 
         */  
        public void setCallback(Callback callback) {  
            this.mCallback = callback;  
        }  
        /* 
         * 調用回調接口對象中的方法 
         */  
        public void doWork() {  
            mCallback.work();  
        }  
    }  


 

然後我們針對去使用就好

 

    public class Boss {  
        private Employee employee;  
        /* 
         * 為Employee設置回調函數, 在這裡定義具體的回調方法 
         */  
        public void setCallback() {  
            employee.setCallback(new Employee.Callback() {  
                @Override  
                public void work() {  
                    System.out.println("work");  
                }  
            });  
        }  
    }  
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved