[Android] mettre à jour listview dynamiquement avec l'adaptateur


Answers

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 notifier le système de 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 n'êtes pas content qu'il y ait des choses comme SimpleAdapter et ArrayAdapter et vous n'avez pas à faire tout ça?

Question

Ce tutoriel utilise un SimpleAdapter qui fonctionne bien, mais j'ai besoin de mettre à jour les tableaux dans 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?




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 accomplir le même objectif en utilisant moins d'empreinte mémoire, et plus responsibe app.

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 */