Intereting Posts
Не удалось расширить RemoteViews: MediaSessionCompat и NotificationCompat.MediaStyle на устройствах HUAWEI Сохранение двойных значений в SQLite: как обеспечить точность? Переместить LatLng 5 метров в направлении другого LatLng Считыватель штрих-кодов / Qr для Android Пользовательский макет, который округляет углы его содержимого Намерение не восстановлено правильно после того, как активность будет убита, если будут установлены четкие верхние и одиночные верхние флаги Ошибка медиаплеер (-38,0), остановка, вызываемая в состоянии 4 Преобразовать файл .mid в любой аудиоформат в формате .wav или .mp3 в android? Отделить RealmObject от Realm Hex Colors на Android – это 8 цифр. Как? В чем разница между #FFFFFF и # FFFFFF00 Поддерживайте соединение сокетов между действиями на Android Android-массив со всеми странами на разных языках Как отобразить TextView под другим в Android с XML-файлами? Воспроизведение видео в VideoView на Android ViewPager с индикатором без поддержки библиотеки Android

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

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

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

Solutions Collecting From Web of "Динамически обновлять список с помощью адаптера"

Используйте ArrayAdapter, поддерживаемый ArrayList. Чтобы изменить данные, просто обновите данные в списке и вызовите adapter.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 , ListAdapter или с помощью CursorAdapter, если ваши данные поступают из базы данных.

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

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

Большинство людей рекомендуют использовать 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 */