android中的回調

來源:互聯網
上載者:User

標籤:方法   null   statistic   rac   back   etc   param   特定   boolean   

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");                  }              });          }      }  





android中的回調

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.