2012-04-27 133 views
9

我希望這將是一個簡單的問題。 我有主要活動,在這個活動中我創建了一些類的實例。如何將一個事件從一個類發送到主類?如何設置某種偵聽器來在類之間發送通知。我現在知道/使用的選項只是保持對父類的引用,並直接從子類調用一些函數。我想知道是否有可能創建類似於在ActionScript中,我可以調用dispatchEvent(新事件(「名稱」))和以後設置addEventlistener(「名稱」功能)?Android - 事件監聽器

+0

「我實現一些類」的意思你在Activity類中聲明瞭一個嵌套類? – Chopin 2012-04-27 14:49:52

回答

18

如果「我實現了一些類」意味着你已經在Activity類中聲明瞭一個嵌套類,而非嵌套的非靜態類將有一個對父類對象的引用。

通常,您可以隨時創建調度員/偵聽器模式。創建監聽器接口並將addListener或setListener方法添加到將調度事件的類中。聽衆的

例子:

public class FileDownloader { 
    IAsyncFetchListener fetchListener = null; 
    ... 
    private void doInBackground(URL url) { 
     ... 
     if (this.fetchListener != null) 
      this.fetchListener.onComplete(result); 
    } 

    public void setListener(IAsyncFetchListener listener) { 
     this.fetchListener = listener 
    } 
} 

與事件監聽器類的實例:

public class MyClass { 

    public void doSomething() { 
     FileDownloader downloader = new FileDownloader(); 

     downloader.setListener(new IAsyncFetchListener() { 

      public void onComplete(String item) { 
       // do something with item 
      } 

      public void onError(Throwable error) { 
       // report error 
      } 
     }); 

     downloader.start(); 
    } 
} 
1

只是實現一個監聽器(或列表

public interface IAsyncFetchListener extends EventListener { 
    void onComplete(String item); 
    void onError(Throwable error); 
} 

事件調度程序示例聽衆)關於產生事件的類。

當產生一個事件遍歷這個列表,並呼籲所有的聽衆都必須實現的方法(通過接口也許?)

希望它能幫助, JQCorreia