我有一个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正确更新。但这不是我想要的解决方案,因为这不会从数据库更新列表视图。
我几个小时以来一直在讨论这个问题,任何帮助都会受到赞赏。
答案 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