【问题标题】:Adding Items to my ArrayList doesn't update the ListView correctly将项目添加到我的 ArrayList 不会正确更新 ListView
【发布时间】:2013-07-10 08:32:14
【问题描述】:

我有一个 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 会正确更新。但这不是我想要的解决方案,因为这不会从数据库中更新列表视图。

我已经为这个问题苦苦思考了好几个小时了,任何帮助都将不胜感激。

【问题讨论】:

  • db.getAllGroups()返回的数据类型是什么
  • 如果问题出在 mainList = db.getAllGroups(),那么您必须向我们展示 getAllGroups() 的实现。据我们所知,它可能会做很多坏事。

标签: android database sqlite listview arraylist


【解决方案1】:

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

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

要么:

  • 更新您现有的ArrayList,或

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

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

【讨论】:

  • 谢谢你让我和mainList.clear();mainList.addAll(db.getAllGroups());一起工作我希望这是一种合适的方式。
  • @bleem313:应该没问题。
猜你喜欢
  • 2020-03-23
  • 1970-01-01
  • 1970-01-01
  • 2016-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多