0

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

4

2 回答 2

2

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

于 2013-04-17T20:45:44.123 回答
1

数据库包含大约 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 的底部时,再添加 25 个limit并再次运行查询:

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

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

于 2013-04-17T20:58:31.677 回答