如何在ListAdapter上使用notifyDataSetChanged()

时间:2014-01-11 15:16:55

标签: android listview android-arrayadapter

这一定是一个简单的问题,因为我是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的对象。

3 个答案:

答案 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();