将项添加到我的ArrayList不会正确更新ListView

时间:2013-07-11 21:45:11

标签: android database sqlite listview arraylist

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

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

所以,如果我的名单是{1,3,6,8,12} 将List添加到List并排序后,我的列表视图显示{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正确更新。但这不是我想要的解决方案,因为这不会从数据库更新列表视图。

我几个小时以来一直在讨论这个问题,任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:2)

  

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

您的ArrayAdapter正在绕过某些ArrayList。无论ArrayList是什么,都不是ArrayList返回的getAllGroups()。在那里,我愿意打赌你刚刚创建了一个新的ArrayList。如果是这样,您的ArrayAdapter就不知道您对数据库所做的任何更改,因为它与ArrayList不同。

或者:

  • 更新现有的ArrayList

  • 使用add()addAll()clear(), insert(), remove(), and/or sort()on your ArrayAdapter { {1}} notifyDataSetChanged()`,或

  • 为您的新(which also saves you the trouble of calling创建一个新的ArrayAdapter,并将新的ArrayList附加到您的ArrayAdapter