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

Cha*_*hao 5 android android-adapter infinite-scroll endlessadapter

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

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

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

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

谢谢

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

kab*_*uko 3

是的,一般来说,如果你GridView是无限的,那么你的Adapter就是无限的。如果您有一个简单的实现,只是将更多数据加载到内存中,那么您肯定会在某个时候遇到内存问题。为了解决这个问题,您必须在某个时候发布旧数据。

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

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