2012-04-27 132 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