Mettre à jour ListView dans le fil principal d'un autre fil
J'ai un thread en cours d'exécution pour obtenir les données à partir de l'internet. Après cela, je voudrais mettre à jour la liste dans le thread principal par l'appel de l'adaptateur.notifyDataSetChanged(). Mais il ne fonctionne pas. Aucune solution de contournement pour qui? Merci.
source d'informationauteur Wilson
Vous devez vous connecter pour publier un commentaire.
Utilisation AsyncTask ( http://developer.android.com/reference/android/os/AsyncTask.html ).
Invoquer adaptateur.notifyDataSetChanged() dans onPostExecute(...) méthode.
Pour plus de détails, veuillez lire ceci: http://android-developers.blogspot.com/2009/05/painless-threading.html
Globalement de bons conseils
http://android-developers.blogspot.com/2009/05/painless-threading.html
Personnellement, je utiliser mon personnalisée thread (une classe étendant Thread ), mais envoyer la réponse à la thread de l'INTERFACE utilisateur par le biais d'un Message. Donc, dans le fil de la fonction run() il y a:
Le thread d'INTERFACE utilisateur définit un gestionnaire de messages.
C'est effectivement plus facile que les AsyncTask.
Ou, envoyer un message à la liste de la file d'attente de messages (ce qui serait exécuter dans le thread de l'INTERFACE utilisateur):
Vous pouvez utiliser une combinaison de RxJava et Rénovation à cette fin.
Voici comment vous pouvez le faire. Je serai à l'aide de l'API GitHub pour l'exemple.
Créer une interface Java pour votre API HTTP.
À l'aide Observables vous permet de convertir la réponse dans un cours d'eau. Chaque événement étant une Liste de pensions de titres.
Utilisation de Rénovation de la classe pour générer une mise en œuvre de la GitHubService interface. Vous peut ou peut ou ne peut pas fournir un personnalisé du Client HTTP.
Maintenant vient la partie Rx. Vous devez ajouter un abonné à écouter la réponse renvoyée par le serveur. En d'autres termes, réagir.
Voici ce que les lignes commentées avec les numéros de font -
1 - Il dit à l'OS thread qui sera utilisé pour faire l'appel. Nous faisons le choix de l'OI fil pour que.
2 - Il dit à l'OS, fil être utilisé pour écouter la réponse. Nous le faisons sur le thread principal, et de mettre à jour l'INTERFACE utilisateur de la réception d'une réponse.
3 - Cette ligne montre que la vraie magie de Rx. Cette simple petite ligne convertit une liste de réponses à des objets individuels. Donc, nous allons réagir à chaque objet au lieu de l'ensemble de la liste tout à fait. Vous pouvez en lire plus à ce sujet ici.
4 - Cette ligne définit en fait ce genre de réaction sera montré à l'événement. Vous pouvez mettre à jour la carte ici.
Une version plus élaborée de l'abonné ressemble à ceci -
P. S. - j'ai utilisé des lambdas dans les exemples ci-dessus. Vous pouvez ajouter que, grâce à ici.
Assumer
yourActivity
est l'activité que votre widget a été placé en elle,yourView
est Le widget etadapter
est Le widget de l'adaptateur:L'astuce ici est la position où vous avez mis le
Ici un exemple simple :
ce travail parfaitement pour moi.