Android 限制来自适配器的ListView中的项目数
我目前正在使用一个带有ListView的SimpleCursorAdapter,它使用一个游标加载程序从ContentProvider和SQlite DB中提取项目。数据库包含大约300个项目,我想限制适配器通过Listview的数量,这样Listview就不会显示数据库中的所有项目。我希望避免对db.query进行限制,而是保留适配器中的项或限制ListView。我还没有找到一个优雅的解决办法。有什么想法吗?制作一个自定义适配器,并重写getCount函数以返回min(实际值、所需的max) 制作一个自定义适配器,并重写getCount函数以返回min(实际值,所需的max) 数据库包含大约300个项目,我想限制适配器通过Listview的数量,这样Listview就不会显示数据库中的所有项目 游标相当有效,300是一个相对较小的数字,因此您应该能够一次获取所有300。它们仅在ListView滚动时绘制。因此,如果您看到性能缓慢,问题可能在于呈现行,而不是光标 我想让适配器获取数据,并让ListView仅在到达可见项末尾时显示它,例如一次加载25个项Android 限制来自适配器的ListView中的项目数,android,sqlite,listview,simplecursoradapter,Android,Sqlite,Listview,Simplecursoradapter,我目前正在使用一个带有ListView的SimpleCursorAdapter,它使用一个游标加载程序从ContentProvider和SQlite DB中提取项目。数据库包含大约300个项目,我想限制适配器通过Listview的数量,这样Listview就不会显示数据库中的所有项目。我希望避免对db.query进行限制,而是保留适配器中的项或限制ListView。我还没有找到一个优雅的解决办法。有什么想法吗?制作一个自定义适配器,并重写getCount函数以返回min(实际值、所需的max)
这很简单,可以考虑一个类似的查询:
//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()
数据库包含大约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()
我不确定我是否理解-为什么要这样做?为什么不想限制db.query?如果您不打算在AdapterView中显示数据,那么将数据加载到适配器中有什么好处呢?我正在尝试这样做,以防止我的ListView在创建时长达300项。我想让适配器获取数据,并让ListView仅在到达可见项末尾时显示它,例如一次加载25个项。类似于Twitter显示ListView内容的方式。希望这能澄清问题。@Kyle您误解了适配器和列表视图的工作方式。如果查询为适配器返回300项,然后只显示其中的25项,那么加载所有300项仍会导致性能下降。是否为275个其他项目创建视图(列表中的行)无关紧要。您试图实现的是使用一个加载25的查询,然后使用另一个加载另一个25并在用户到达底部时将其添加到当前数据的查询。不使用一个查询加载所有300个,然后将视图限制为仅显示其中25个。@FoamyGuy您可以提供一个此查询过程的示例吗?我不确定我是否理解-为什么要尝试这样做?为什么不限制db.query?如果您不打算在AdapterView中显示数据,那么将数据加载到适配器中有什么好处呢?我正在尝试这样做,以防止我的ListView在创建时长达300项。我想让适配器获取数据,并让ListView仅在到达可见项末尾时显示它,例如一次加载25个项。类似于Twitter显示ListView内容的方式。希望这能澄清问题。@Kyle您误解了适配器和列表视图的工作方式。如果查询为适配器返回300项,然后只显示其中的25项,那么加载所有300项仍会导致性能下降。是否为275个其他项目创建视图(列表中的行)无关紧要。您试图实现的是使用一个加载25的查询,然后使用另一个加载另一个25并在用户到达底部时将其添加到当前数据的查询。不使用一个查询加载所有300个,然后将视图限制为仅显示其中25个。@FoamyGuy您能提供一个此查询过程的示例吗?