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.
4 answers
-
Definiowanie interfejsu wywołania zwrotnego
public interface NewsUpdateListener { void onNewsUpdate(<News data to be passed>); }
-
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); } .... }
-
Odpal callback, gdy newsy będą dostępne
.... for (listener : listeners) { listener.onNewsUpdate(<News data to be passed>); } ....
-
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 } } } } ....
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);
}
}
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
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.
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