android — динамически обновлять список с помощью адаптера" />

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

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

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

66 голосов | спросил dell116 16 MaramWed, 16 Mar 2011 05:22:33 +03002011-03-16T05:22:33+03:0005 2011, 05:22:33

4 ответа


0

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

ответил Robby Pond 16 MaramWed, 16 Mar 2011 05:29:13 +03002011-03-16T05:29:13+03:0005 2011, 05:29:13
0

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

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

ответил leech 16 AM00000070000003331 2011, 07:27:33
0

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

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

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

ответил Dominic Tancredi 16 MaramWed, 16 Mar 2011 05:35:17 +03002011-03-16T05:35:17+03:0005 2011, 05:35:17
0

Большинство людей рекомендуют использовать 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 */
ответил Roozbeh Zabihollahi 7 MaramMon, 07 Mar 2016 02:44:16 +03002016-03-07T02:44:16+03:0002 2016, 02:44:16

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132