通过数组适配器限制列表视图项的数量

时间:2014-09-15 17:47:13

标签: android listview android-arrayadapter android-adapter

我正在使用列表视图来显示用户提交的评论。这显然由ArrayAdapter支持显示。现在可能会有很多很多评论,我不希望所有的千条评论都保存在内存中。

我是否真的要担心这个问题,还是Android会自行解决这个问题?如果没有,我怎么能最好地做到这一点。添加新评论时我提出的唯一策略是:

  • 检查列表的大小
  • 如果是> threshold
  • ,请删除一条评论
  • 添加新评论
  • 清除适配器
  • 将列表重新分配给适配器

2 个答案:

答案 0 :(得分:0)

在构造函数中,如果列表超出限制,则对其进行切片。

public MyAdapter(List<Item> items) {
    this.items = items;
    sliceItems();
}

void sliceItems() {
    //sort items first
    if (this.items.size() > limit) {
      this.items = this.items.subList(0, limit);
    }
}

public void addItem(Item item) {
    this.items.add(item);
    sliceItems();
}

答案 1 :(得分:0)

我不同意另一个答案。听起来你会更好地继承BaseAdapter来编写自己的自定义适配器解决方案。这是一个更多的工作,但将是更好的解决方案。当你需要修改ArrayAdapter的一种变异方法的行为时,就是你打开自己可能遇到的问题的那一刻。也不建议跟踪用于构建ArrayAdapter支持的解决方案的列表。首先,不能保证列表引用保持不变......实际上可以改变。因此,它使您的列表与ArrayAdapter保持同步相当困难。

另外,我可能错了,但我相信将子列表重新分配到原始列表会失败。看看这个post。你最好只是打电话给items.remove(#);删除一个项目。

但是否则,一般的解决方案是(在您的自定义适配器中)是在添加时始终检查列表的大小。如果超过阈值,请删除项目。