Пользовательский прослушиватель событий в приложении для Android
Мне нужно настроить простой прослушиватель событий для обновления ListView
один раз в то время. Проблема в том, что я не знаю, как создать событие.
Я знаю, что для таких событий, как нажатие клавиши или кнопки, мне просто нужно реализовать Handler
. Но в этом конкретном случае мне действительно нужно сгенерировать событие, которое будет запущено каждый раз, когда другой поток приложений моего приложения просыпается и обновляет список новостей из RSS-канала.
Я сделал все, но застрял здесь. Могу ли я получить какое-либо предложение или ссылку с дополнительной информацией о том, как это реализовать?
Ответы
Ответ 1
-
Определите интерфейс обратного вызова
public interface NewsUpdateListener
{
void onNewsUpdate(<News data to be passed>);
}
-
Предоставьте средство регистрации в фоновом потоке, который получает 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);
}
....
}
-
Пожар обратного вызова, когда доступна новость
....
for (listener : listeners)
{
listener.onNewsUpdate(<News data to be passed>);
}
....
-
Зарегистрировать прослушиватель где-то во время инициализации
....
<class <Background processing class object>.registerListener
(
new OnNewsUpdateListener() {
onNewsUpdate(<News Data>) {
// process news data
runOnUIThread(new Runnable() {
public void run() {
// refresh list view
}
}
}
}
....
Ответ 2
попробуйте следующее:
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);
}
}
Ответ 3
Похоже, вам нужен Handler - (смотри android.os.Handler для деталей).
Метод sendMessageDelayed позволит вам планировать, когда сообщение отправляется вашему обработчику.
Быстрый поиск остановил полный пример, который должен вас запустить: http://www.tutorialforandroid.com/2009/01/using-handler-in-android.html
Ответ 4
Вы можете использовать жизненный цикл Android для этого.
Создайте интерфейс сигнала, иначе ваше событие
interface NewsUpdateSignal{
void newsUpdateHandler(Mydata data);
}
Чтобы зарегистрировать его внутри вашей деятельности или в любом другом месте, вам может быть много слушателей с тем же 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
}
}
И отправьте сигнал, когда вам нужно, откуда вам нужно.
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);
}
}
Отказ от ответственности: я являюсь автором жизненного цикла Android.