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?

  • Android ListView défilement vers le haut
  • Pourquoi Google utilise-t-il Canvas dans la vue de la liste de conversation de l'application Gmail?
  • BaseAdapter Listview Filtering Android
  • Listview itemclick ne fonctionne pas
  • Recyclage et manipulation de différents types d'inflation en rangée
  • Comment puis-je définir une couleur d'arrière-plan différente pour chaque ligne dans listview?
  • Quels sont les avantages de RecyclerView par rapport à ListView?
  • SmoothScrollToPosition après notificationDataSetChanged ne fonctionne pas sur Android
  • 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.