1

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

}
4

1 回答 1

0

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

于 2013-04-11T09:49:45.977 回答