web-dev-qa-db-fra.com

mettre à jour listview dynamiquement avec l'adaptateur

This le 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?

69
dell116

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

136
Robby Pond

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();
    }
}

Vous n'êtes pas content qu'il y ait des choses comme SimpleAdapter et ArrayAdapter et vous n'avez pas à faire tout cela?

26
leech

Les SimpleListAdapter sont principalement utilisés pour les données statiques! Si vous souhaitez gérer des données dynamiques, il est préférable de travailler avec ArrayAdapter , ListAdapter ou avec CursorAdapter si vos données arrivent. de la base de données.

Voici un tutoriel utile pour comprendre les données de liaison dans un ListAdapter

Comme mentionné dans ce SO question

3
Dominic Tancredi

La plupart des gens recommandent d'utiliser notifyDataSetChanged(), mais j'ai trouvé ce lien très utile. En fait, en utilisant clear et add, vous pouvez atteindre le même objectif en utilisant moins d’empreinte mémoire et une application plus responsable.

Par exemple:

notesListAdapter.clear();
notes = new ArrayList<Note>();
notesListAdapter.add(todayNote);
if (birthdayNote != null) notesListAdapter.add(birthdayNote);

/* no need to refresh, let the adaptor do its job */
0