【问题标题】:How to properly download and update ListView progressively?如何正确下载和逐步更新 ListView?
【发布时间】:2011-06-15 19:20:20
【问题描述】:

目前我有一个服务可以下载大约 500 条复杂数据的记录,当用户请求刷新或缓存数据过期时,该服务会下载数据并将其缓存到数据库中。在显示列表的活动中,我正在收听来自服务的有关下载进度的广播。每次获得进度状态时,我都会运行:

mAdapter.getCursor().requery();

我看到我的数据在下载时逐渐填充 ListView,这很好……但我有两个大问题。

  1. 我的解决方案似乎非常复杂和肮脏。
  2. 此解决方案不适用于 Android 3.0 及更高版本。

我正在寻找有关如何更好地解决此问题的反馈。必须有更好的方法。

【问题讨论】:

    标签: android adapter android-listview


    【解决方案1】:

    如果您担心使用requery() 和Android 3.0 的替代方案,请参阅CursorAdaptor 文档中的deprecation note,其中解释了使用LoaderManagerCursorLoader 作为替代方案。

    根据您对应用程序要求的解释,您执行此操作的方式可能是最惯用的方法,我不会真正称其为“肮脏”。对我来说似乎很直接。

    【讨论】:

    • 感谢您的评论。我查看了弃用说明,糟糕的是它仅在 API 级别 11 上可用。我想我可能必须为这两种方法创建一个兼容的反射类...... :(
    • 好吧,它只是被弃用了,所以由于支持仍然存在,所以迁移到更新的 API 并不重要。如果您打算支持更高的 SDK 级别,则只需要一个兼容性包装器,并且在您想要支持的 SDK 级别之一中删除 requery() - 换句话说:仅当您打算同时支持 requery() 方法时,以及较新的 CursorLoader 方法。
    【解决方案2】:

    我建议在用户刷新时提供一个加载屏幕,而不是逐步填充您的列表。这对我来说似乎更干净。无论如何,无论是渐进式还是末尾,您都必须重新查询游标,因此不确定您认为哪个部分可以改进。

    【讨论】:

    • 我对这个列表的要求是避免放置加载屏幕,因为它有很多记录并且连接速度很慢,这会让应用程序感觉很慢。这个想法是让用户有机会在列表被填充时浏览它。
    猜你喜欢
    • 2014-09-20
    • 2019-01-11
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    相关资源
    最近更新 更多