这一定是一个简单的问题,因为我是Android新手。
我有一个ListAdapter的实现,但是当对运行它的对象列表进行更改时需要更新列表。在各种帖子中建议使用notifyDataSetChanged()。然而,自然我得到错误'找不到方法':
ListView lv = (ListView) findViewById(R.id.menu_list_activity);
((ListAdapter) lv.getAdapter()).notifyDataSetChanged();
在Activity的onCreate()中,我将它添加到ListView:
lv.setAdapter(new MenuListAdapter(this, objects));
由于ListAdapter只是一个接口。但是该方法包含在ArrayAdaptor中。 那么我应该使用什么,最好的方法是什么?我基本上只有一个List,其中包含用于填充ListView的对象。
答案 0 :(得分:1)
您也可以执行以下操作
MenuListAdapter menuListAdapter = new MenuListAdapter(this, objects)
lv.setAdapter(menuListAdapter);
现在只需在任何地方打电话。
menuListAdapter.notifyDataSetChanged();
正如@laalto所提到的,你必须在自定义适配器类中扩展正确的适配器。直接使用BaseAdapter或者使用像ArrayAdapter一样使用Base Adapter的任何适配器。
答案 1 :(得分:0)
在适配器继承树中,notifyDataSetChanged()
中定义了BaseAdapter
。假设您的MenuListAdapter
直接或间接地延伸BaseAdapter
,请将getAdapter()
的结果投射到BaseAdapter
以调用该方法。
答案 2 :(得分: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();