динамически обновлять список с помощью адаптера - PullRequest
69 голосов
/ 16 марта 2011

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

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

Ответы [ 4 ]

136 голосов
/ 16 марта 2011

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

26 голосов
/ 16 августа 2011

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

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, и вам не нужно делать все это?

3 голосов
/ 16 марта 2011

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

Вот полезное руководство по пониманию привязки данных в ListAdapter

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

0 голосов
/ 07 марта 2016

Большинство людей рекомендуют использовать 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 */
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...