J'ai besoin de configurer un simple écouteur d'événements pour actualiser un ListView
de temps en temps. Le problème est que je ne sais pas comment générer un événement.
Je sais que pour des événements comme la pression d'une touche ou d'un bouton, j'ai juste besoin d'implémenter le Handler
. Mais dans ce cas spécifique, j'ai besoin de générer l'événement, qui sera déclenché chaque fois qu'un autre thread en cours d'exécution de mon application se réveillera et actualisera sa liste de nouvelles à partir d'un flux RSS.
J'ai tout fait, mais je suis coincé ici. Puis-je obtenir une suggestion ou un lien avec plus d'informations sur la façon de mettre en œuvre cela?
Définir une interface de rappel
public interface NewsUpdateListener
{
void onNewsUpdate(<News data to be passed>);
}
Fournir une fonction d'enregistrement sur le fil d'arrière-plan qui obtient le flux 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);
}
....
}
Déclencher le rappel lorsque des nouvelles sont disponibles
....
for (listener : listeners)
{
listener.onNewsUpdate(<News data to be passed>);
}
....
Enregistrer l'auditeur quelque part pendant l'initialisation
....
<class <Background processing class object>.registerListener
(
new OnNewsUpdateListener() {
onNewsUpdate(<News Data>) {
// process news data
runOnUIThread(new Runnable() {
public void run() {
// refresh list view
}
}
}
}
....
essaye ça:
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);
}
}
Il semble que vous ayez besoin d'un gestionnaire recherchez Android.os.Handler pour plus de détails).
La méthode sendMessageDelayed vous permettra de planifier l'envoi du message à votre gestionnaire.
Une recherche rapide a tiré un exemple complet qui devrait vous aider à démarrer: --- (http://www.tutorialforandroid.com/2009/01/using-handler-in-Android.html
Vous pouvez utiliser cycle de vie Android pour cela.
Créez une interface de signal, alias votre événement
interface NewsUpdateSignal{
void newsUpdateHandler(Mydata data);
}
Au lieu de vous y inscrire au sein de votre activité ou n'importe où ailleurs, il peut y avoir plusieurs auditeurs sur le même 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
}
}
Et envoyez le signal quand vous en avez besoin, d'où que vous ayez besoin.
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);
}
}
Clause de non-responsabilité: je suis l'auteur de Android cycle de vie.