71 votes

mettre à jour listview dynamiquement avec l'adaptateur

Ce tutoriel utilise un SimpleAdapter qui fonctionne bien, mais je dois mettre à jour les tableaux de l'adaptateur lorsque de nouvelles données sont entrées.

Pourriez-vous s'il vous plaît me guider sur la façon de mettre à jour un ListView en utilisant autre chose qu'un SimpleAdapter?

139voto

Robby Pond Points 37875

Utilisez un ArrayAdapter soutenu par un ArrayList. Pour modifier les données, il suffit de mettre à jour les données de la liste et d'appeler adapter.notifyDataSetChanged () .

26voto

leech Points 2672

Si vous créez votre propre adaptateur, il existe une fonction abstraite notable:

 public void registerDataSetObserver(DataSetObserver observer) {
    ...
}
 

Vous pouvez utiliser les observateurs donnés pour informer le système de la mise à jour:

 private ArrayList<DataSetObserver> observers = new ArrayList<DataSetObserver>();

public void registerDataSetObserver(DataSetObserver observer) {
    observers.add(observer);
}
public void notifyDataSetChanged(){
    for (DataSetObserver observer: observers) {
        observer.onChanged();
    }
}
 

Bien que vous ne soyez pas content qu'il y ait des choses comme SimpleAdapter et ArrayAdapter et que vous n'avez pas à faire tout cela?

4voto

Dominic Tancredi Points 5352

SimpleListAdapter sont principalement utilisés pour les données statiques! Si vous souhaitez traiter des données dynamiques, vous êtes mieux de travailler avec un ArrayAdapter, ListAdapter ou avec un CursorAdapter si vos données sont à venir à partir de la base de données.

Voici un utile tutoriel dans la compréhension de la liaison de données dans un ListAdapter

Comme mentionnés dans le présent DONC, la question

-1voto

quangson91 Points 34

Je pense que vous pouvez mettre à jour votre ListView en utilisant la commande:

 adapter.add(your_item_you_want_to_add);
 

Je pense que c'est mieux que:

 arrayList.add(item);
adapter.notifyDataSetChanged();
 

Je ne sais pas pourquoi, mais pour ce qui est de mon cas: lorsque j'utilise la deuxième méthode, lorsque ListView est en cours de chargement et que je touche plusieurs éléments de la vue des éléments de la liste -> j'ai une erreur :(. L'application se bloque.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X