Intereting Posts
Комплект разработчика BTLE (Bluetooth Low energy) – должен иметь профиль близости Ящик Android Navigation не пропускает onTouchEvent к действию Загрузка собственной библиотеки в тесте Android JUnit Как включить / отключить поведение FloatingActionButton Android Bitmap Limit – предотвращение java.lang.OutOfMemory Android, как использовать DexClassLoader для динамической замены Activity или Service Получение ошибки «Метод Gradle DSL не найден:« compile () », когда Syncing Build.Gradle Неожиданные результаты, реализующие простое размытие движения в Libgdx Приложение несовместимо со всеми вашими устройствами NPE в ChangeCurrentByOneFromLongPressCommand (на устройствах Samsung с Android 4.3) Как узнать размер файла перед его загрузкой? Понимание mixer_paths.xml в android ListView с алфавитами справа, как и iPhone. Является ли это возможным? IsItemChecked всегда возвращает противоположность тому, что предполагается, когда внутри onItemClickListener? Стиль кнопок дизайна материалов для 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 */