J'ai développé une application pour apprendre Android qui télécharge, via un lien URL http, une image et la stocke en base (Blob). Tout ça grâce a une classe qui hérite d'"AsyncTask".
En gros, j'ai une activité principale qui affiche une listView de mes images en base. Dans cette activité, il y a un bouton qui démarre une deuxième activité qui correspond à un formulaire qui permet de rentrer l'url de l'image à télécharger.
Mon souci étant de mettre à jour la listView de mon activité principale lorsque mon téléchargement est terminé (à savoir dans la méthode "onPostExecute" de mon AsyncTask).
Comment puis-je récupérer mon activité principale pour mettre à jour la liste qu'elle contient ?
Ce n'est pas la bonne manière de procéder. Il ne faut pas récupérer l'activité pour forcer sa mise à jour, mais s'aider des évènements Android pour éventuellement la mettre à jour.
Par exemple, tu peux forcer une mise à jour dans la méthode onResume de ton Activité. Comme ça, dès que l'activité s'affiche à l'écran, elle sera mise à jour. L'inconvénient de cette méthode est quelle peut-être mise à jour alors que ce n'est pas nécessaire.
La meilleure solution reste ce qu'on appelle les Broadcast. Tu peux dire à ton activité principale de t'abonner à une "action". Quand elle reçoit cette action, tu peux lui dire de faire des choses, comme par exemple se mettre à jour. Ainsi, dans ta deuxième activité, dès que le téléchargement est terminé, tu broadcast une action de rafrachissement, l'activité la "capte" et se rafraichit
Il ne faut pas directement chercher à manipuler ton activité.
Par exemple quand ton acitivité n°2 a terminé son traitement, tu envoies le broadcast suivant :
sendBroadcast(new Intent("Refresh"));
Dans ton activité principale, tu déclares un attribut de type BroadcastReceiveret un autre de type IntentFilter et tu instancies le tout dans le onCreate :
intentFilter = new IntentFilter();
intentFilter.addAction("Refresh");
broadcastReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(final Context context, final Intent intent)
{
if ("Refresh".equals(intent.getAction()))
{
//lancer le rafraîchissement de la page ici !
}
}
};
Il ne faut pas oublier de s'abonner à ce broadcast, par exemple dans la méthode onCreate toujours :
Merci beaucoup ça fonctionne parfaitement bien ! J'étais parti sur une classe à part entière qui héritait de BroadcastReceiver, j'avais pas pensé à l'implémenter directement dans mon activité principale !
Merci beaucoup ça m'enlève une ÉNORME épine du pied !
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Mon site - Mon livre sur le XML - Mon blog
Mon site - Mon livre sur le XML - Mon blog
Mon site - Mon livre sur le XML - Mon blog