适配器notifyDataSetChanged无法正常工作

时间:2013-08-23 14:01:30

标签: android adapter notifydatasetchanged

我使用notifyDataSetChanged作为适配器,但我的列表没有更新。这是我的代码的一部分。

adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,userNames);
list = (ListView) findViewById(R.id.listViewUsers);
list.setAdapter(adapter);

所以每次我将项目添加到userNames时,我都会调用adapter.notifyDataSetChanged();方法,但没有任何更新。我尝试了许多清洁工作,清除userNames,但它无效。 谁能帮我? 感谢

编辑:

我正在调用这两个函数,我正在添加新用户。

  userNames.add(user.getUsername());
  adapter.notifyDataSetChanged();

我也有User课程,但我用用户的用户名填写ListView

2 个答案:

答案 0 :(得分:1)

对于ArrayAdapternotifyDataSetChanged()仅在您使用适配器上的添加,插入,移除和清除功能时才有效。

构造ArrayAdapter时,它保存传入的List的引用。如果要传入属于Activity成员的List,并稍后更改该Activity成员,则ArrayAdapter仍然保持引用原始列表。适配器不知道您更改了活动中的列表。

试试这个:

userNames.add(user.getUsername());
adapter.clear();
adapter.addAll(userNames);
adapter.notifyDataSetChanged();

答案 1 :(得分:1)

尝试直接将用户名添加到适配器,而不是添加到userNames。也许当你创建一个新的ArrayAdapter实例时,它会在适配器中创建一个新的私有List,你可以在旧的userNames实例中添加用户名:

adapter.add(user.getUsername());
adapter.notifyDataSetChanged();