1

我有一个 ListView,我试图在添加到数据库后从数据库中更新它。

当数据进入 List 并进入 ListView 时,ListView 不会更新 List 中的项目数。

因此,如果我的列表是 {1, 3, 6, 8, 12} 将 4 添加到列表并排序后,我的列表视图显示 {1, 3, 4, 6 ,8} 未显示第 6 项 12。

当我向列表中添加更多内容时,这个问题变得更加复杂,如果我要添加另一个项目,这个 ListView 仍然只会显示前 5 个。

这是有问题的代码区域

TourGroup group = data.getParcelableExtra(TOURGROUP);

DatabaseHandler db = new DatabaseHandler(this);
db.addGroup(group);

mainList = db.getAllGroups();

db.close();

Collections.sort(mainList, new CustomComparator());

ListView groupList = (ListView) findViewById(R.id.groupList);
ArrayAdapter adapter = (ArrayAdapter) groupList.getAdapter();
adapter.notifyDataSetChanged();

如果我更换

mainList = db.getAllGroups();

mainList.add(group);

然后 ListView 正确更新。但这不是我想要的解决方案,因为这不会从数据库更新列表视图。

几个小时以来,我一直在努力解决这个问题,任何帮助将不胜感激。

4

1 回答 1

3

但这不是我想要的解决方案,因为这不会从数据库更新列表视图。

ArrayAdapter正在环绕一些ArrayList. 不管ArrayList是什么,它都不是ArrayListgetAllGroups(). 在那里,我敢打赌你刚刚创建了一个新的ArrayList. 如果是这样,您ArrayAdapter不知道您对数据库所做的任何更改,因为它是不同的ArrayList.

任何一个:

  • 更新您现有的ArrayList, 或

  • 使用add(), addAll(), clear(),insert() ,remove() , and/orsort() on yourArrayAdapter (which also saves you the trouble of callingnotifyDataSetChanged()`, 或

  • ArrayAdapter为您的新创建一个新ArrayList并将新附加ArrayAdapter到您的ListView

于 2013-07-11T21:52:18.843 回答