Nunca
importa ... encontró la respuesta aquí :)
http://www.javaworld.com/javaworld/javatips/jw-javatip10.html
pegar del artículo con el fin de conservarla:
Desarrolladores versado en el evento impulsado El modelo de programación de MS-Windows y el sistema de ventanas X están acostumbrados a pasar los punteros a las funciones que se invocan (es decir, "volver a llamar") cuando sucede algo. El modelo orientado a objetos de Java actualmente no es compatible con punteros de método, y por lo tanto parece excluir el uso de este mecanismo cómodo. ¡Pero no todo está perdido!
El soporte de interfaces de Java proporciona un mecanismo por el cual podemos obtener el equivalente de devoluciones de llamada. El truco consiste en definir una interfaz simple que declare el método que queremos invocar.
Por ejemplo, supongamos que queremos que nos notifiquen cuando ocurre un evento. Podemos definir una interfaz:
public interface InterestingEvent
{
// This is just a regular method so it can return something or
// take arguments if you like.
public void interestingEvent();
}
Esto nos da un control sobre los objetos de las clases que implementan la interfaz. Por lo tanto, no tenemos que preocuparnos por ninguna otra información de tipo extraño. Esto es mucho mejor que piratear funciones de trampolín C que usan el campo de datos de widgets para contener un puntero de objeto cuando se usa código C++ con Motif.
La clase que señalará el evento tiene que esperar objetos que implementan la interfaz InterestingEvent y luego invocar el interestingEvent() método según sea apropiado.
public class EventNotifier
{
private InterestingEvent ie;
private boolean somethingHappened;
public EventNotifier (InterestingEvent event)
{
// Save the event object for later use.
ie = event;
// Nothing to report yet.
somethingHappened = false;
}
//...
public void doWork()
{
// Check the predicate, which is set elsewhere.
if (somethingHappened)
{
// Signal the even by invoking the interface's method.
ie.interestingEvent();
}
//...
}
// ...
}
En ese ejemplo, he utilizado la somethingHappened predicado a realizar un seguimiento de si el evento debe ser activado. En muchos casos, el mero hecho de que se haya llamado al método es suficiente para garantizar la señalización del interestingEvent().
El código que desea recibir la notificación de evento debe implementar la interfaz InterestingEvent y simplemente pasar una referencia a sí mismo al notificador de eventos.
public class CallMe implements InterestingEvent
{
private EventNotifier en;
public CallMe()
{
// Create the event notifier and pass ourself to it.
en = new EventNotifier (this);
}
// Define the actual handler for the event.
public void interestingEvent()
{
// Wow! Something really interesting must have occurred!
// Do something...
}
//...
}
Eso es todo. Espero que usar este simple modismo de Java hará que su transición a Java sea un poco menos nerviosa.
El paradagm iPhone es bastante diferente a la de Android. Si explica lo que está tratando de lograr con esto, alguien podría ayudarlo a encontrar la forma de Android. –
Bueno, estoy usando un objeto singleton que envuelve el objeto MediaPlayer de Android y tiene su propio conjunto de métodos para reproducir una pista específica, pausar, reproducir, etc. Lo que quiero es que cuando la pista se detenga o se inicie, debería "enviar" una notificación "a las clases que hacen referencia al objeto singleton para actualizar la imagen del botón de reproducción a un icono de pausa o a un icono de reproducción. Espero que esto aclare las cosas? – Sid