wake-up-neo.com

Benutzerdefinierter Ereignis-Listener in Android App

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?

42
Bilthon
  1. Definieren Sie eine Callback-Schnittstelle

            public interface NewsUpdateListener 
            {
                void onNewsUpdate(<News data to be passed>);
            }
    
  2. 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);
            }
        ....
        }
    
  3. Feuern Sie den Rückruf ab, wenn Nachrichten verfügbar sind

    ....
    for (listener : listeners) 
    {
        listener.onNewsUpdate(<News data to be passed>);
    }
    ....
    
  4. 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
                    }
                }
            }
    }
    ....
    
90
Sameer

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);
   }
}
28
Hojjat
3
Colin Stewart

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.

2
Ilya Gazman