我有一个自定义列表视图(带有两个图像和 5 个文本视图),当我第一次使用所有数据加载它时,我必须在其中显示 200 多个数据,然后它返回内存不足异常,以解决我想要的相同问题我们向下滚动列表视图直到列表的最后一项,然后它的应用程序再次将更多数据添加到同一个列表中。它运行相同,直到我们在列表视图中获得所有数据。请不要告诉我使用 EndlessAdapter,因为 EndlessAdapter 总是每 10 秒后下载项目。一段时间后,它也会返回内存不足。
提前致谢。
我有一个自定义列表视图(带有两个图像和 5 个文本视图),当我第一次使用所有数据加载它时,我必须在其中显示 200 多个数据,然后它返回内存不足异常,以解决我想要的相同问题我们向下滚动列表视图直到列表的最后一项,然后它的应用程序再次将更多数据添加到同一个列表中。它运行相同,直到我们在列表视图中获得所有数据。请不要告诉我使用 EndlessAdapter,因为 EndlessAdapter 总是每 10 秒后下载项目。一段时间后,它也会返回内存不足。
提前致谢。
我建议每次用户滚动时检查 ListView 的第一个元素的位置。
ListView.getFirstVisiblePosition()
如果它接近列表中元素的数量,您可以将项目添加到列表底部并从列表顶部删除。
将列表http://developer.android.com/reference/java/util/List.html分配给您的 addapter,然后您可以调用 item.add和item.remove
关于内存不足,5个imageViews和5个textViews是不可能造成内存不足的。您可能将所有 200 张图像保存在一起,而不是使用某种缓存(如软引用和LruCache)。适配器的重点是使用最少的内存显示大量项目(当然不是同时)。你可以看到,如果你通过滚动玩得足够多,即使是 Play Store(我仍然喜欢称之为 android Market)应用程序也会使用内存缓存......
有关列表视图的更多信息,请观看此
您可能还想在此处阅读有关处理图像的更多信息。
无论如何,您可以将 getView 作为触发器(使用与 getCount() 值相比的位置参数)来确定何时加载更多项目,然后使用 notifyDatasetChanged 更新适配器(并更新 getCount() 值)。
当用户向下滚动一次 ExpandableListView 时,我做了这样的事情来加载更多元素。
myListView.setOnScrollListener( new OnScrollListener()
{
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
{
int lastVisibleElement = firstVisibleItem + visibleItemCount;
if(lastVisibleElement == totalItemCount)
{
//Load elements
myListAdapter.notifyDataSetChanged();
}
}