Android: Update Listview after Thread charge les données du réseau

  1. J'aime que mon GUI apparaisse immédiatement lorsque l'utilisateur démarre l'application.
  2. Ensuite, certaines données (texte, images) sont chargées en arrière-plan (comme une application YouTube).
  3. ListView et Gallery sont mises à jour automatiquement avec ces nouvelles données.

Je lance mon ListView, lance un thread et charge les données … et ensuite ListView ne se met pas à jour! Plusieurs personnes m'ont dit que je devais utiliser notifyDataSetChanged() . Mais je ne peux pas placer cette commande dans mon Thread (juste inconnu).

Des idées?

  • Existe-t-il un moyen de contrôler les vues à l'intérieur de l'en-tête NavigationView?
  • Mettre en œuvre la liste de la section avec la case à cocher?
  • Android ListView :: setItemChecked ne fonctionne pas
  • Utilisation du sélecteur d'une disposition pour modifier les propriétés de son enfant
  • SetOnClickListener d'un ListView ne fonctionne pas
  • ANDROID: ajout d'espace vide à la fin de ListView
  • J'ai un Recyclerview et une liste avec 5000 articles mais je veux seulement charger 100 articles à la fois
  • Android: les boutons adjacents dans la vue de liste ont automatiquement cliqué
  • 3 Solutions collect form web for “Android: Update Listview after Thread charge les données du réseau”

    J'ai ce même problème … et je me suis excité quand j'ai rencontré cette question. Mais pas de réponse? 🙁

    Après, j'ai laissé passer le problème pendant environ deux semaines, j'ai trouvé la solution ici :

    Longue histoire courte:

    Quote from top link:

    Nous devons utiliser un objet Handler car nous ne pouvons pas mettre à jour la plupart des objets UI dans un thread distinct. Lorsque nous envoyons un message au gestionnaire, il sera enregistré dans une file d'attente et sera exécuté par le thread UI dès que possible.

    Une fois que vous consultez le code, vous voyez ce que l'auteur dit.
    REMARQUE: même avec un gestionnaire, Android peut ne pas vous permettre de mettre à jour un objet de vue à partir de la méthode run () du thread. J'ai eu cette erreur:

     05-31 02:12:17.064: ERROR/AndroidRuntime(881): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 

    Pour le contourner, j'ai mis à jour un ensemble de données dans ma méthode run () et utilisé ce tableau pour mettre à jour la vue dans la méthode handleMessage () du gestionnaire.

    J'espère que cela aidera les autres.

    Vous pouvez utiliser l'Adaptateur lent pour actualiser la vue:

     SlowAdapter = new SlowAdapter(this); list.setAdapter(SlowAdapter); SlowAdapter.notifyDataSetChanged(); 

    Je l'ai trouvé tout seul en lisant ce fil et en essayant.

    Court: la méthode AsyncTask onProgressUpdate peut toucher la vue : http://developer.android.com/reference/android/os/AsyncTask.html#onProgressUpdate (Progrès …)

    Contexte: j'avais besoin d'appeler requery sur mon curseur, de sorte qu'un ListView continuait à être mis à jour pendant que la tâche remplissait la base de données. L'appel requery effectué dans doInBackground a échoué avec l' option CalledFromWrongThreadException mentionnée, mais le même code dans les travaux onProgressUpdate .

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.