【问题标题】:best way to load data from a webservice into a listview将数据从 web 服务加载到列表视图的最佳方法
【发布时间】:2012-04-23 06:29:31
【问题描述】:

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

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

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

【问题讨论】:

    标签: android lazy-loading


    【解决方案1】:

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

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

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

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

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

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

    以及如何正确缓存图片?

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

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

    您可能还喜欢this question 的内容(这是公认的答案),为您提供有关内存管理的一些一般性建议。

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

    旧的,已弃用分析器:

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

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

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

    【讨论】:

    • 我想使用一个片段来显示列表,我怎样才能用它重新调整适配器,.?你会说使用 onSaveInstanceState 但我在 onCreate 方法中调用 setRetain 为 true,这使得任何 Bundle 始终为 null,因为片段没有被杀死
    • @user1320899 这可能会对您有所帮助:stackoverflow.com/questions/5412746/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多