Durante el más reciente Google IO, hubo una presentación sobre la implementación de aplicaciones cliente tranquilas. Desafortunadamente, fue solo una discusión de alto nivel sin código fuente de la implementación.
En este diagrama, en la ruta de retorno hay varias devoluciones de llamada diferentes a otros métodos.
¿Cómo declaro cuáles son estos métodos?
Entiendo la idea de una devolución de llamada: un fragmento de código que se llama después de que cierto evento ha sucedido, pero no sé cómo implementarlo. La única forma en que he implementado devoluciones de llamada hasta ahora ha sido anular varios métodos (en OnActivityResult, por ejemplo).
Siento que tengo una comprensión básica del patrón de diseño, pero sigo tropezando con la forma de manejar el camino de regreso.
Respuestas:
En muchos casos, tiene una interfaz y pasa un objeto que la implementa. Los cuadros de diálogo, por ejemplo, tienen OnClickListener.
Solo como un ejemplo aleatorio:
Probablemente estropeé la sintaxis en la opción 2. Es temprano.
fuente
Cuando algo sucede desde mi punto de vista, enciendo un evento que mi actividad está escuchando:
// DECLARADO EN VISTA (PERSONALIZADA)
// DECLARADO EN ACTIVIDAD
Si desea obtener más información sobre la comunicación (devoluciones de llamada) entre fragmentos, consulte aquí: http://developer.android.com/guide/components/fragments.html#CommunicatingWithActivity
fuente
No hay necesidad de definir una nueva interfaz cuando se puede usar una existente:
android.os.Handler.Callback
. Pase un objeto de tipo Devolución de llamada e invoque la devolución de llamadahandleMessage(Message msg)
.fuente
Ejemplo para implementar el método de devolución de llamada utilizando la interfaz.
Defina la interfaz, NewInterface.java .
paquete javaapplication1;
Crea una nueva clase, NewClass.java . Llamará al método de devolución de llamada en la clase principal.
La clase principal, JavaApplication1.java, para implementar la interfaz NewInterface - método callback (). Creará y llamará al objeto NewClass. Luego, el objeto NewClass devolverá su método callback () a su vez.
fuente
para aclarar un poco la respuesta del dragón (ya que me tomó un tiempo descubrir qué hacer con
Handler.Callback
):Handler
se puede usar para ejecutar devoluciones de llamada en el hilo actual u otro, pasándoloMessage
s. losMessage
datos retenidos que se utilizarán desde la devolución de llamada. aHandler.Callback
se puede pasar al constructor deHandler
para evitar extender Handler directamente. por lo tanto, para ejecutar algún código mediante devolución de llamada desde el hilo actual:EDITAR: acabo de darme cuenta de que hay una mejor manera de obtener el mismo resultado (menos el control de exactamente cuándo ejecutar la devolución de llamada):
fuente
Callback
versión porque no necesariamente tienes acceso a los datos necesariosRunnable.run()
en el momento en que la construyesTambién puede usar
LocalBroadcast
para este propósito. Aquí hay un resumen rápidoCrear un receptor de difusión:
Así es como puedes activarlo
cancelar el registro del receptor en onPause:
fuente