2

我正在制作一个适配器,它强调从 Web 服务加载的数据,每次用户向下滚动时,它都会加载更多数据并将其添加到该适配器后面的 ArrayList 中。数据包含图像 URL,然后我在 getView 方法中延迟加载。

  • 有没有更好的解决方案?
  • 以及如何正确缓存这些图像?
  • 当用户旋转设备时,我可以保留适配器的数据吗?所以不需要从头开始再次加载它们?

我使用片段来显示该列表?

4

1 回答 1

2

我将尝试一一回答所有三个问题。

有没有更好的解决方案?(除延迟加载外)

那要看。延迟加载的好处是,当您显示组件时,您不需要一开始就拥有所有数据。问题通常是,如何根据需要获取新数据。

因此,当从网络加载新数据时,实际上是加载数据块有多大的问题。我不会在下一个条目之后加载一个新条目,而是在到达列表末尾时加载例如 20 个新条目。

当然,这只是一个数字的随机想法,您需要为您的案例找到速度和可用性之间的完美点。

因此,当您从 Web 服务加载足够快的数据块时,这确实是一个很酷的概念。但是,如果您只是在阅读一个又一个条目(因此,用户几乎总是在等待新数据),这真的很烦人。

以及如何正确缓存图像?

有多种可能的解决方案可用,其中一些是:

  • 使用 system-cache,就像浏览器一样(似乎是最好的)。
  • 实现您自己的使用设备存储的系统(例如 SD 卡或内部应用程序存储(首选第一个))。

您可能还喜欢这个问题的内容(并且它是公认的答案),为您提供一些关于内存管理的一般建议。

当用户旋转设备时,我可以保留适配器的数据吗?

旧的,已弃用的分析器:

是的,您可以使用 Activity 的“实例状态”来执行此操作。基本上,来自 Activity 的onSaveInstanceState()-method允许您使用状态信息填充给定Bundle,然后将其传递给onCreate()-method

您将保存在其中的数据Bundle将是(例如)列表的当前位置,甚至可能是列表本身(取决于大小)。

是的,使用Loaders API。它也可以在兼容性库中找到。

于 2012-04-10T23:42:26.287 回答