Android无限滚动网格,适配器是否必须无限增长?

我在Android上实现了一个简单的无限滚动GridView.我有以下组件:

>带有onScrollListener的GridView,每当GridView滚动到最底层时,我就会启动AsyncTask以将更多项目加载到我的适配器中.
>一个适配器,它附加从AsyncTask获取的项目,并触发notifyDataChanged(),以便GridView可以自行刷新.

这似乎工作得很好,除非在这种情况下适配器无限增长…我的意思是每当用户滚动到最后时我会继续向这个适配器附加项目,这似乎是一个内存问题.

实现无限适配器的正确方法是什么?我正在寻找概念,而不是为我做这件事的第三方罐子.

谢谢


明确的答案有正确的理论.我对它的实现将加载的数据备份到sqllite数据库中,因此总体流程是:在线程中从Internet下载数据,解析并将数据存储到线程中的数据库中,在UI线程上触发notifyDataChanged.
适配器的getCount()方法只是从数据库中执行select count(id),它会立即从数据库中检索一批对象到内存中供适配器使用.

最佳答案
是的,通常如果您的GridView是无限的,那么您的适配器是无限的.如果你有一个简单的实现只是将更多的数据加载到内存中,那么你肯定会在某些时候遇到内存问题.要解决这个问题,您必须在某个时候发布旧数据.

假设您的适配器可以访问某些“无限”存储,从中获取数据(通常是Internet),您可以考虑设置数据的最大大小(以字节或项目计数)保存在适配器的内存中.超过最大大小时,可以从内存中清除旧项目.如果再次请求这些旧项目,则从无限存储而不是从内存中再次加载它们(并且可能从内存中清除其他旧项目).

这意味着您的GridView项目是从适配器构建的,该适配器将数据存储在某种缓存中(此处为LruCache可能很有用),该缓存由某些(可能是外部)存储支持.您还可以在内存缓存和外部存储之间放置磁盘缓存.

转载注明原文:Android无限滚动网格,适配器是否必须无限增长? - 代码日志