динамически обновлять listview с помощью адаптера


этой учебник использует SimpleAdapter, который отлично работает, но мне нужно обновить массивы в адаптере при вводе новых данных.

не могли бы вы указать мне, как обновить ListView, используя что-то другое, кроме SimpleAdapter?

4 65

4 ответа:

использовать ArrayAdapter поддерживается ArrayList. Чтобы изменить данные, просто обновите данные в списке и позвоните адаптер.notifyDataSetChanged().

Если вы создадите свой собственный адаптер, есть одна заметная абстрактная функция:

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

вы можете использовать данные наблюдателей, чтобы уведомить систему об обновлении:

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

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

хотя разве вы не рады, что есть такие вещи, как SimpleAdapter и ArrayAdapter, и вам не нужно все это делать?

SimpleListAdapter в основном используются для статических данных! Если вы хотите обрабатывать динамические данные, вам лучше работать с ArrayAdapter, или CursorAdapter Если ваши данные поступают из базы данных.

здесь полезный учебник в понимании привязки данных в ListAdapter

Как указано в этой поэтому вопрос

большинство людей рекомендуют использовать notifyDataSetChanged(), но я нашел этой ссылке довольно полезно. На самом деле с помощью clear и add вы можете достичь той же цели, используя меньший объем памяти и более ответственное приложение.

например:

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