permission - permisos android manifest
Escucha de evento personalizado en la aplicaciĆ³n de Android (4)
Necesito configurar un escucha de eventos simple para actualizar un ListView
vez en cuando. El problema es que no sé cómo podría generar un evento.
Sé que para eventos como presionar una tecla o un botón solo necesito implementar el Handler
. Pero en este caso específico, realmente necesito generar el evento, que se disparará cada vez que se despierte otro hilo en funcionamiento de mi aplicación y actualice su lista de noticias de un canal RSS.
He hecho todo, pero me quedé atrapado aquí. ¿Puedo obtener alguna sugerencia o enlace con más información sobre cómo implementar esto?
Definir una interfaz de devolución de llamada
public interface NewsUpdateListener { void onNewsUpdate(<News data to be passed>); }
Proporcionar un servicio de registro en el hilo de fondo que obtiene el feed RSS
class <Background processing class name> { .... ArrayList<NewsUpdateListener> listeners = new ArrayList<NewsUpdateListener> (); .... public void setOnNewsUpdateListener (NewsUpdateListener listener) { // Store the listener object this.listeners.add(listener); } .... }
Activa la devolución de llamada cuando haya noticias disponibles
.... for (listener : listeners) { listener.onNewsUpdate(<News data to be passed>); } ....
Registro de escucha en algún lugar durante la inicialización
.... <class <Background processing class object>.registerListener ( new OnNewsUpdateListener() { onNewsUpdate(<News Data>) { // process news data runOnUIThread(new Runnable() { public void run() { // refresh list view } } } } ....
Parece que necesita un controlador - (consulte android.os.Handler para obtener más información).
El método sendMessageDelayed le permitirá programar cuándo se enviará el mensaje a su controlador.
Una búsqueda rápida mostró un ejemplo completo que debería comenzar: http://www.tutorialforandroid.com/2009/01/using-handler-in-android.html
Puedes usar el ciclo de vida de Android para eso.
Crea una interfaz de señal, también conocida como tu evento
interface NewsUpdateSignal{
void newsUpdateHandler(Mydata data);
}
Luego de registrarse en su actividad o en cualquier otro lugar que desee, podría haber muchos oyentes en la misma Signal
.
class MyActivity extends Activity implements NewsUpdateSignal{
Signal<NewsUpateSignal> newsUpdateSignal = SignalsBag.inject(NewsUpateSignal.class);
@Override
protected void onCreate(Bundle savedInstanceState) {
newsUpdateSignal.addListener(this);
}
@Override
public void newsUpdateHandler(final Mydata data){
//Do something here
}
}
Y envíe la señal cuando lo necesite, desde donde lo necesite.
Class A{
Signal<NewsUpateSignal> newsUpdateSignal = SignalsBag.inject(NewsUpateSignal.class);
void execute(){
// obtain the data somehow, and dispatch it, the callback will be invoked on the same thread
newsUpdateSignal.dispatcher.newsUpdateHandler(data);
}
}
Descargo de responsabilidad: soy el autor del ciclo de vida de Android.
prueba esto:
interface MyHandlerInterface
{
void onHandle(Object obj)
}
class myListClass
{
MyHandlerInterface myHandler;
public void setHandlerListener(MyHandlerInterface listener)
{
myHandler=listener;
}
protected void myEventFired(myObj)
{
if(myHandler!=null)
myHandler.onHandle(myObj);
}
}