我有一个任务在ListView中显示数以千计的项目。所以我需要将这些项目的数据加载到内存中。但每个项目的数据都大于1KB,因此将所有数据加载到内存中将耗尽内存并导致OOM异常。事实上,我最初只加载这些数据的一部分,如果用户滚动到ListView的底部,更多的数据将被添加到ListView中。但是,如果用户保持滚动到底部,所有数据将最终加载到内存中,则出现OOM。如何将新项目添加到ListView的底部并同时从顶部删除旧项目?
为了解决这个问题,我想我可以设置一个最大限制的ListView的长度。例如,将最大长度设置为500.当用户保持滚动到ListView的底部时,将50个新项目添加到ListView的末尾,同时从顶部删除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();
}
}
}
https://github.com/commonsguy/cwac-endless。尝试这个。 – Raghunandan 2013-03-14 16:15:17
@Raghunandan我知道这个EndlessAdapter有一点,但不清楚当用户保持滚动到ListView的底部时它是否会将所有数据加载到内存中? – 2013-03-14 16:19:26
为什么不发布关于同一标签commonsware和android的不同问题。我相信有人可以用无尽的滚动来帮助你。 – Raghunandan 2013-03-14 16:21:06