Niestandardowy słuchacz zdarzeń w aplikacji Android

Muszę skonfigurować prosty detektor zdarzeń, aby odświeżyć ListView raz na jakiś czas. Problem w tym, że nie wiem, jak Mogę wygenerować Zdarzenie.

Wiem, że dla zdarzeń takich jak naciśnięcie klawisza lub przycisku wystarczy zaimplementować Handler. Ale w tym konkretnym przypadku muszę wygenerować zdarzenie, które będzie wywoływane za każdym razem, gdy inny uruchomiony wątek mojej aplikacji obudzi się i odświeży listę wiadomości z kanału RSS.

Zrobiłem wszystko, ale utknąłem tutaj. Can I get jakieś sugestie lub link z Więcej informacji na temat tego, jak to wdrożyć?
Author: Ivaylo Slavov, 2010-06-06

4 answers

  1. Definiowanie interfejsu wywołania zwrotnego

            public interface NewsUpdateListener 
            {
                void onNewsUpdate(<News data to be passed>);
            }
    
  2. Udostępnij funkcję rejestracji w wątku tła, który pobiera kanał 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);
            }
        ....
        }
    
  3. Odpal callback, gdy newsy będą dostępne

    ....
    for (listener : listeners) 
    {
        listener.onNewsUpdate(<News data to be passed>);
    }
    ....
    
  4. Zarejestruj słuchacza gdzieś podczas inicjalizacji

    ....
        <class <Background processing class object>.registerListener
    (
        new OnNewsUpdateListener() {
            onNewsUpdate(<News Data>) {
                // process news data
                runOnUIThread(new Runnable() {
                    public void run() {
                        // refresh list view
                    }
                }
            }
    }
    ....
    
 90
Author: Sameer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-05 13:25:02

Spróbuj tego:

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);
   }
}
 27
Author: Hojjat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-05 09:14:25

Wygląda na to, że potrzebujesz opiekuna-(poszukaj Androida.os.Handler po szczegóły).

Metoda sendMessageDelayed pozwoli ci zaplanować, kiedy wiadomość zostanie wysłana do twojego Handlera.

Szybkie wyszukiwanie wyciągnęło pełny przykład, który powinien zacząć: http://www.tutorialforandroid.com/2009/01/using-handler-in-android.html

 3
Author: Colin Stewart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-07 11:21:27

Możesz do tego użyć cyklu życia Androida.

Stwórz interfejs sygnałowy, czyli Twoje wydarzenie

interface NewsUpdateSignal{
    void newsUpdateHandler(Mydata data);
}

Niż zarejestrować się w swojej aktywności lub gdziekolwiek indziej, może być wielu słuchaczy tego samego 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 
    }
}

I Wyślij sygnał, kiedy potrzebujesz, skąd kiedykolwiek potrzebujesz.

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);
    }        
}

Zastrzeżenie: jestem autorem cyklu życia Androida.

 2
Author: Ilya Gazman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-12 06:14:31