【问题标题】:Display SQLite query result in Listview in Android在 Android 的 Listview 中显示 SQLite 查询结果
【发布时间】:2015-04-22 11:22:24
【问题描述】:

在我的 Android 应用程序中,我有一个带有列表视图的活动,其中显示了大约 4000 个存储的项目 本地在 SQLite 数据库中。如果我对某个项目进行编辑,我如何才能在列表视图中仅获得此更改, 无需刷新所有项目列表(这意味着新查询 4000 个结果)?此查询会降低性能。

我想要类似 ios 的 NSFetchedResultsController 的东西。

【问题讨论】:

    标签: android sqlite android-listview azure-mobile-services


    【解决方案1】:

    策略应该是 -

    1. 在编辑联系人时,如果更新成功,您只需从 db 获取此特定联系人的最新信息。
    2. 在适配器的源列表/数组的特定位置更新已编辑的联系人对象。
    3. 调用您的adapter.notifyDataSetChanged()

    【讨论】:

    • 谢谢大家的回答。以您的方式,我将不得不保留 arrayList(在适配器中传递),随着数据库发生的变化不断更新。这正是我的想法,但是有没有更有效的方法来实现它?
    • 这种方法正在我们的一些实时应用程序中使用超过 10k 行。到目前为止,很好地满足了我们的需求。现在“更好”、“更高效”始终是一个主观问题。 :)
    【解决方案2】:
    1. 您的 SQL lite 数据库中的每个联系人都必须有一个 ID。
    2. 当您编辑联系人时,会根据 ID 更新数据库中的特定记录。
    3. 如果更新成功,则表示您发送到数据库的信息存储成功。
    4. 现在您可以使用相同的信息来更新您的 ArrayList/HashMap,无论您使用什么来填充您的列表视图。 例如:-假设您在成功更新时编辑了列表视图中的第三个索引联系人,您添加了类似 yourarraylist.add(3,contact);

    5. 和fire notifydatasetChanged.

    【讨论】:

      【解决方案3】:

      如果可能,请尝试以下步骤:

      1. 尝试从 db 中获取数据,但在不会影响主 UIThread 的不同线程中进行。
      2. 然后您可以在适配器对象上调用 adapter.notifyDataSetChanged()。它会完成我希望的工作:)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-25
        • 2017-09-18
        • 2013-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多