2014-01-11 2 views
0

Это должен быть простой вопрос, поскольку я новичок в Android.Как использовать notifyDataSetChanged() в ListAdapter

У меня есть реализация ListAdapter, но вам нужно обновить список при внесении изменений в список объектов, который его запускает. В различных сообщениях рекомендуется использовать notifyDataSetChanged(). Однако, естественно, я получаю ошибку «не удается найти метод»:

ListView lv = (ListView) findViewById(R.id.menu_list_activity);   
((ListAdapter) lv.getAdapter()).notifyDataSetChanged(); 

В OnCreate() деятельности я добавил его в ListView:

lv.setAdapter(new MenuListAdapter(this, objects)); 

Как ListAdapter только интерфейс. Однако метод включен в ArrayAdaptor. Итак, что я должен использовать, что является лучшим способом? У меня в основном есть список с объектами, которые будут использоваться для заполнения ListView.

ответ

0

В дереве наследования адаптеров notifyDataSetChanged() определено в BaseAdapter. Предполагая, что ваш MenuListAdapter прямо или косвенно отклоняет BaseAdapter, введите результат getAdapter() в BaseAdapter, чтобы вызвать метод.

1

Вы можете также сделать следующее

MenuListAdapter menuListAdapter = new MenuListAdapter(this, objects) 
lv.setAdapter(menuListAdapter); 

Теперь просто называют следующий в любом месте.

menuListAdapter.notifyDataSetChanged(); 

Как упомянуто в @laalto, вы должны расширять правый адаптер в своем классе адаптера. Либо BaseAdapter напрямую, либо любой из адаптеров, которые используют базовый адаптер, такой как ArrayAdapter.

0

При создании адаптера сохраните его в локальной переменной, а затем используйте эту переменную.

MenuListAdapter adapter = new MenuListAdapter(this, objects) 
lv.setAdapter(adapter); 

// You need to update the objects list, so that adapter can get the recent update 
objects.add(newItem); 

// Then notify the adapter 
adapter.notifyDataSetChanged(); 
Смежные вопросы