【问题标题】:Limit number of items in ListView from Adapter限制来自适配器的 ListView 中的项目数
【发布时间】:2013-04-18 05:23:04
【问题描述】:

我目前正在使用带有 ListView 的 SimpleCursorAdapter,它使用 CursorLoader 从 ContentProvider 和 SQlite DB 中提取项目。数据库包含大约 300 个项目,我想限制适配器通过 Listview 的数量,因此 ListView 不会显示数据库中的所有项目。我想避免对 db.query 施加限制,而是在 Adapter 中保留项目或限制 ListView。我还没有找到一个优雅的解决方案。有什么想法吗?

【问题讨论】:

  • 我不确定我是否理解 - 你为什么要这样做?
  • 为什么不想限制 db.query?如果您不打算在 AdapterView 中显示数据,那么将数据加载到适配器有什么好处?
  • 我试图这样做是为了防止我的 ListView 在创建时长为 300 个项目。我想让适配器获取数据并让 ListView 仅在到达可见项目的末尾时才显示它,例如一次加载 25 个项目。类似于 Twitter 如何显示 ListView 内容。希望这能澄清问题。
  • @Kyle 您误解了适配器和 ListViews 的工作方式。如果您进行查询,为您的适配器返回 300 个项目,然后只显示其中 25 个项目,您仍然会在加载所有 300 个项目时受到性能影响。是否为其他 275 个项目创建视图(列表中的行)是无关的。您要实现的目标是使用一个加载 25 的查询,然后使用另一个加载另一个 25 的查询,并在用户到达底部时将它们添加到当前数据中。没有用一个查询加载所有 300 个,然后将视图限制为仅显示其中的 25 个。
  • @FoamyGuy 你能提供一个这个查询过程的例子吗?

标签: android sqlite listview simplecursoradapter


【解决方案1】:

制作一个自定义适配器,并覆盖 getCount 函数以返回 min(actual_number, max_you_want);

【讨论】:

    【解决方案2】:

    数据库包含大约 300 个项目,我想限制其适配器通过 Listview 的数量,因此 ListView 不会显示数据库中的所有项目。

    游标相当有效,300 是一个相对较小的数字,因此您应该能够一次获取所有 300。它们仅在 ListView 滚动时绘制。因此,如果您发现性能缓慢,问题可能在于渲染行,而不是光标。

    我想让适配器获取数据并让 ListView 仅在到达可见项目的末尾时才显示它,例如一次加载 25 个项目。

    这很简单,考虑如下查询:

    //db.query(tableName, columns, where, whereArgs, groupBy, having, orderBy, limit);
    int limit = 25;
    Cursor cursor = db.query(TABLE_NAME, null, null, null, null, null, null, String.valueOf(limit));
    

    当您到达 ListView 的底部时,再向 limit 添加 25 个并再次运行查询:

    limit += 25;
    cursor = db.query(TABLE_NAME, null, null, null, null, null, null, String.valueOf(limit));
    

    以此类推,直到limit >= cursor.getCount()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      相关资源
      最近更新 更多