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?

65
demandé sur dell116 2011-03-16 05:22:33

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 () .

130
répondu Robby Pond 2011-03-16 02:29:13

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?

26
répondu leech 2011-08-16 03:27:33

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

3
répondu Dominic Tancredi 2018-09-28 01:43:09

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 */
0
répondu Roozbeh Zabihollahi 2017-05-23 11:33:16