Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 限制来自适配器的ListView中的项目数_Android_Sqlite_Listview_Simplecursoradapter - Fatal编程技术网

Android 限制来自适配器的ListView中的项目数

Android 限制来自适配器的ListView中的项目数,android,sqlite,listview,simplecursoradapter,Android,Sqlite,Listview,Simplecursoradapter,我目前正在使用一个带有ListView的SimpleCursorAdapter,它使用一个游标加载程序从ContentProvider和SQlite DB中提取项目。数据库包含大约300个项目,我想限制适配器通过Listview的数量,这样Listview就不会显示数据库中的所有项目。我希望避免对db.query进行限制,而是保留适配器中的项或限制ListView。我还没有找到一个优雅的解决办法。有什么想法吗?制作一个自定义适配器,并重写getCount函数以返回min(实际值、所需的max)

我目前正在使用一个带有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个项

这很简单,可以考虑一个类似的查询:

//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您能提供一个此查询过程的示例吗?