2012-04-27 18 views
9

Espero que esta sea una pregunta simple. Tengo actividad principal, en esta actividad creo una instancia de alguna clase. ¿Cómo enviar algún evento de una clase a la principal? Cómo configurar un tipo de un oyente para enviar notificaciones entre clases. La única opción que sé/uso ahora es mantener la referencia a la clase principal y llamar directamente a alguna función de la clase hija.Android - event listener

Me pregunto si es posible crear algo así como en ActionScript, donde puedo llamar a dispatchEvent (new Event ("name")) y luego instalar addEventlistener (función "name") ??

+0

"implemento algunas de clase" medios que has declarado una clase anidada dentro de tu clase de Actividad? – Chopin

Respuesta

18

Si "implemento alguna clase" significa que ha declarado una clase anidada dentro de su clase de actividad que la clase no estática anidada tendrá una referencia al objeto de la clase padre.

En general, siempre puede crear el patrón de despachador/oyente usted mismo. Cree una interfaz de escucha y agregue el método addListener o setListener a la clase que distribuirá el evento.

Ejemplo de oyente:

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

Ejemplo de eventos distribuidor:

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 
    } 
} 

Ejemplo de clase con detector de eventos:

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

Sólo implementar un oyente (o una lista de oyentes) en la clase que genera los eventos.

Cuando se genera un evento iterar sobre esta lista y llamar a un método que todos los oyentes deben implementar (a través de una interfaz tal vez?)

espero que ayudó, JQCorreia