mise à jour dynamique de listview avec adaptateur
ce tutoriel utilise un simple adaptateur qui fonctionne bien, mais je dois 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 quelque chose d'autre qu'un simple adaptateur?
4 réponses
utiliser un ArrayAdapter appuyé par un ArrayList. Pour modifier les données, il suffit de mettre à jour les données dans la liste et d'appeler adaptateur.notifyDataSetChanged () .
si vous créez votre propre adaptateur, il y a 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();
}
}
même si tu n'es pas content qu'il y ait des choses comme le simple décapsuleur et le surligneur et tu n'as pas à faire tout ça?
SimpleListAdapter sont principalement utilisés pour les données statiques! Si vous voulez traiter des données dynamiques, il est préférable de travailler avec un ArrayAdapter , ListAdapter ou avec un CursorAdapter si vos données proviennent de la base de données.
voici un tutoriel utile pour comprendre les données de reliure dans un ListAdapter
comme indiqué dans la présente DONC, la question
la plupart des gens recommandent d'utiliser notifyDataSetChanged()
, mais j'ai trouvé ce lien assez utile. En fait, en utilisant clear
et add
vous pouvez accomplir le même objectif en utilisant moins d'empreinte mémoire, et plus responsable 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 */