如何将新项添加到ListView的底部并同时从顶部删除旧项?

时间:2013-03-14 16:11:24

标签: android listview

我有一个在ListView中显示数千个项目的任务。所以我需要将这些项的数据加载到内存中。但是每个项目的数据都大于1KB,因此将所有数据加载到内存中会耗尽内存并导致OOM异常。实际上,我首先只加载这些数据的一部分,如果用户滚动到ListView的底部,则会向ListView添加更多数据。但如果用户继续滚动到底部,所有数据最后都会被加载到内存中,OOM会出现。

为了解决这个问题,我想我可以设置ListView长度的最大限制。例如,将最大长度设置为500.当用户继续滚动到ListView的底部时,在ListView的末尾添加50个新项目,同时从其顶部删除50个项目,因此最大长度ListView保持不变。我知道如何添加新项目到最后并从ListView顶部删除旧项目,但当我尝试一起执行此操作时,奇怪的事情发生,ListView的内容不是我所期望的。

那么,谁知道如何解决我的问题呢?

任何有用的答案都将受到赞赏,但请不要让我更改项目的数据大小,因为我没有权利这样做。

伪代码(scrollListener设置为ListView):

class MyOnScrollListener implements OnScrollListener{

     public void onScrollChange(View, int, int, int){
         if(reach the bottom){
            add50ItemsToTheBottomOfTheList();
            remove50FromTheTopOfTheList();
            myListViewAdapter.notifyDataSetChanged();
         }
     }

}

1 个答案:

答案 0 :(得分:0)

我试图从ListView的顶部删除一些项目,但这会导致ListView的奇怪行为。所以,我只是将列表顶部的那些项设置为null,并在用户向后滚动时再次从网络加载它们。