Ich muss einen einfachen Ereignis-Listener einrichten, um von Zeit zu Zeit ein ListView
zu aktualisieren. Das Problem ist, dass ich nicht weiß, wie ich ein Ereignis generieren kann.
Ich weiß, dass ich für Ereignisse wie das Drücken von Tasten oder Knöpfen nur das Handler
implementieren muss. Aber in diesem speziellen Fall muss ich das Ereignis generieren, das jedes Mal ausgelöst wird, wenn ein anderer Thread meiner App aufwacht und die Liste der Nachrichten aus einem RSS-Feed aktualisiert.
Ich habe alles getan, stecke aber hier fest. Kann ich Vorschläge oder Links mit weiteren Informationen zur Implementierung erhalten?
Definieren Sie eine Callback-Schnittstelle
public interface NewsUpdateListener
{
void onNewsUpdate(<News data to be passed>);
}
Stellen Sie im Hintergrund-Thread eine Registrierungsfunktion bereit, die den RSS-Feed abruft
class <Background processing class name>
{
....
ArrayList<NewsUpdateListener> listeners = new ArrayList<NewsUpdateListener> ();
....
public void setOnNewsUpdateListener (NewsUpdateListener listener)
{
// Store the listener object
this.listeners.add(listener);
}
....
}
Feuern Sie den Rückruf ab, wenn Nachrichten verfügbar sind
....
for (listener : listeners)
{
listener.onNewsUpdate(<News data to be passed>);
}
....
Registrieren Sie den Listener während der Initialisierung
....
<class <Background processing class object>.registerListener
(
new OnNewsUpdateListener() {
onNewsUpdate(<News Data>) {
// process news data
runOnUIThread(new Runnable() {
public void run() {
// refresh list view
}
}
}
}
....
versuche dies:
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);
}
}
Es hört sich so an, als bräuchten Sie einen Handler Details finden Sie in Android.os.Handler).
Mit der sendMessageDelayed-Methode können Sie planen, wann die Nachricht an Ihren Handler gesendet wird.
Eine schnelle Suche ergab ein vollständiges Beispiel, das Ihnen den Einstieg erleichtern sollte: --- (http://www.tutorialforandroid.com/2009/01/using-handler-in-Android.html
Sie können dafür Android-Lebenszyklus verwenden.
Erstellen Sie eine Signalschnittstelle, auch bekannt als Ihre Veranstaltung
interface NewsUpdateSignal{
void newsUpdateHandler(Mydata data);
}
Wenn Sie sich innerhalb Ihrer Aktivität oder an einem beliebigen anderen Ort dafür registrieren, kann es sein, dass viele Zuhörer dasselbe Signal
hören.
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
}
}
Und senden Sie das Signal, wann und wo immer Sie es benötigen.
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);
}
}
Haftungsausschluss: Ich bin der Autor von Android Lebenszyklus.