我有一个在 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();
}
}
}