我有一个在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();
}
}
}
答案 0 :(得分:0)
我试图从ListView的顶部删除一些项目,但这会导致ListView的奇怪行为。所以,我只是将列表顶部的那些项设置为null,并在用户向后滚动时再次从网络加载它们。