欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android  回調(diào)詳解及簡(jiǎn)單實(shí)例

 更新時(shí)間:2017年01月16日 11:04:01   投稿:lqh  
這篇文章主要介紹了Android 回調(diào)詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下

Android  回調(diào)

前言:

Android中的回調(diào)最經(jīng)典的就是點(diǎn)擊事件設(shè)置監(jiān)聽(tīng)(一般通過(guò)switch(v.getId()))這里寫(xiě)個(gè)最基本的

btn_rigister.setOnClickListener(new View.OnClickListener() { 
  @Override 
  public void onClick(View view) { 
    // TODO log in 
  } 
}); 

view對(duì)外暴露了一個(gè)接口onClick

public interface OnClickListener { 
    /** 
     * Called when a view has been clicked. 
     * 
     * @param v The view that was clicked. 
     */ 
    void onClick(View v); 
  } 

我們?cè)谟玫臅r(shí)候?qū)崿F(xiàn)具體方法寫(xiě)了處理時(shí),當(dāng)前的Actvity是沒(méi)有對(duì)這個(gè)方法做任何操作,這個(gè)被充實(shí)之后的onClick方法被view回調(diào)處理!其中一段處理 比如

public boolean callOnClick() { 
    ListenerInfo li = mListenerInfo; 
    if (li != null && li.mOnClickListener != null) { 
      li.mOnClickListener.onClick(this); 
      return true; 
    } 
    return false; 
  } 

具體可以閱讀View.java

2、什么是回調(diào)

回調(diào)其實(shí)是一種雙向調(diào)用模式,也就說(shuō)調(diào)用方在接口被調(diào)用時(shí)也會(huì)調(diào)用對(duì)方的接口,聽(tīng)起來(lái)就很拗口,翻譯翻譯就是“實(shí)現(xiàn)了抽象類(lèi)/接口 的實(shí)例實(shí)現(xiàn)了父類(lèi)的提供的抽象方法,后,將該方法交還給父類(lèi)來(lái)處理”,口訣念3遍,可以體會(huì)到其中的內(nèi)涵了沒(méi)?

主要要弄清楚一點(diǎn),實(shí)現(xiàn)方法交還給提供接口的父類(lèi)處理!

3、為什么要用回調(diào)

這里體現(xiàn)了Java面向?qū)ο蟮摹叭f(wàn)事萬(wàn)物皆為對(duì)象”,我們需要將普通物體的特性抽象出來(lái),共性之中又有特性,每個(gè)不同的特性就需要交給特定的情況處理,通過(guò)暴露接口方法可以減少很多重復(fù),代碼更加優(yōu)雅。
比如view具有被點(diǎn)擊的通性,但是每個(gè)點(diǎn)擊又會(huì)產(chǎn)生不一樣的事件處理一樣,因此android對(duì)外暴露一個(gè)接口有個(gè)onClick方法,你需要處理啥你就寫(xiě)啥,view只會(huì)調(diào)用這個(gè)方法,具體怎么處理你已經(jīng)自己為不同的點(diǎn)擊事件做了處理了。

4、如何寫(xiě)

一個(gè)很好的小栗子

【定義接口】 在類(lèi)中定義一個(gè)Interface, 并在接口中定義一個(gè)抽象方法

public interface Callback{  
    public abstract void work();  
  }  

【接口對(duì)象】在類(lèi)中定義一個(gè)該接口的成員變量

private Callback mCallback;  

 【設(shè)置對(duì)象】在類(lèi)中定義一個(gè)公共方法,可以設(shè)置這個(gè)接口的對(duì)象,調(diào)用該方法給接口對(duì)象變量賦值

public void setCallback(Callback callback) {  
    this.mCallback = callback;  
  }  

【調(diào)用方法】調(diào)用接口對(duì)象中的方法

public void doWork() {  
    mCallback.work();  
  }  

ok,

完整代碼如下

public class Employee {  
  /* 
   * 定義回調(diào)接口的成員變量 
   */  
  private Callback mCallback;  
  /* 
   * 聲明回調(diào)接口 
   */  
  public interface Callback{  
    public abstract void work();  
  }  
  /* 
   * 設(shè)置回調(diào)接口對(duì)象成員變量 
   */  
  public void setCallback(Callback callback) {  
    this.mCallback = callback;  
  }  
  /* 
   * 調(diào)用回調(diào)接口對(duì)象中的方法 
   */  
  public void doWork() {  
    mCallback.work();  
  }  
}  

然后我們針對(duì)去使用就好

public class Boss {  
  private Employee employee;  
  /* 
   * 為Employee設(shè)置回調(diào)函數(shù), 在這里定義具體的回調(diào)方法 
   */  
  public void setCallback() {  
    employee.setCallback(new Employee.Callback() {  
      @Override  
      public void work() {  
        System.out.println("work");  
      }  
    });  
  }  
}  

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

最新評(píng)論