динамически обновлять listview с помощью адаптера
этой учебник использует SimpleAdapter, который отлично работает, но мне нужно обновить массивы в адаптере при вводе новых данных.
не могли бы вы указать мне, как обновить ListView, используя что-то другое, кроме SimpleAdapter?
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 */