¿Cómo puedo configurar varios oyentes para un evento?

Quiero configurar varios oyentes para un evento, y he encontrado que usar el listener compuesto es la clave.

¿Podría alguien darme un ejemplo?

class CompositeListener implements OnEventListener { private List<OnEventListener> registeredListeners = new ArrayList<OnEventListener>(); public void registerListener (OnEventListener listener) { registeredListeners.add(listener); } public void onEvent(Event e) { for(OnEventListener listener:registeredListeners) { listener.onEvent(e); } } } 

…..

 CompositeListener composite = new CompositeListener(); composite.registerListener(listener1); composite.registerListener(listener2); component.setOnEventListener(composite); 

Usted puede intentar este corte usted necesitará extender la visión eg extienda el botón para aceptar a oyentes múltiples del onclick. Se crea una clase interna que implementa OnclickListener

 private class OnclickListenerCollection implements OnClickListener{ private ArrayList<OnClickListener> listeners; public void addOnclickListener(OnClickListener listener){ listeners.add(listener); } @Override public void onClick(View v) { for(OnClickListener l : listeners){ l.onClick(v); } } } 

En el constructor de sub-clasificado botón, usted llama a super.setOnclickListener pasando una instancia de su clase interna

 private OnclickListenerCollection listenerCollector; 

En su constructor tiene:

 listenerCollector = new OnclickListenerCollection(); super.setOnClickListener(listenerCollector); 

Anula el método setOnclickListener para agregar oyentes a la colección

 @Override public void setOnClickListener(OnClickListener l) { listenerCollector.addOnclickListener(l); } 

No lo he probado pero creo que funcionará

Sé que es varios años tarde, pero quería añadir mi versión que acabo de pasar unas horas de llegar al trabajo. Aquí está el código que se encuentra en el archivo DBupdateEventListener.java:

 public interface DBupdateEventListener { public void onUpdateChannelSubscriptions(); } class DBupdateEventListenerRegistry implements DBupdateEventListener{ public static List<DBupdateEventListener> registeredListeners = new ArrayList<DBupdateEventListener>(); public void registerListener(DBupdateEventListener listener){ registeredListeners.add(listener); } public void onUpdateChannelSubscriptions(){ for (DBupdateEventListener listener:registeredListeners){ listener.onUpdateChannelSubscriptions(); } } } 

Es muy importante que registerListeners sea una variable pública estática. Esta es la razón por la que he añadido mi propia respuesta a esta pregunta varios años después de que ya había sido cerrado.

Y aquí está el código que utilizo en el método OnCreate () del fragmento que debe actualizarse después de que se desencadene el evento:

  dbUpdater = new DBupdateEventListener() { @Override public void onUpdateChannelSubscriptions() { //put the code you want to run when the event is triggered here: loadChannelListsFromDB(); } }; DBupdateEventListenerRegistry temp = new DBupdateEventListenerRegistry(); temp.registerListener(dbUpdater); 

Y aquí está el código utilizado en mi tarea asíncrona que desencadena el evento en primer lugar:

 dbUpdaterRegistry = new DBupdateEventListenerRegistry(); dbUpdaterRegistry.onUpdateChannelSubscriptions(); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.