gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:57:35 25 4
gpt4 key购买 nike

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

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

这似乎工作正常,除非在这种情况下适配器无限增长......我的意思是每当用户滚动到末尾时我都会将项目附加到这个适配器,这似乎是一个内存问题。

实现无限适配器的正确方法是什么?我正在寻找概念,而不是为我做的第三方 jar。

谢谢

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

最佳答案

是的,通常如果您的 GridView 是无限的,那么您的 Adapter 也是无限的。如果您只是将更多数据加载到内存中,那么您肯定会在某个时候遇到内存问题。要解决这个问题,您必须在某个时候发布旧数据。

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

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

关于Android无限滚动网格,适配器是否必须无限增长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14200934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com