Android SimpleCursorAdapter - 限制ListView结果

问题描述:

由于我远离笔记本电脑并且无法生成任何代码示例,所以我提前表示歉意,但希望我可以清楚地回答我的问题。我有一个由sqlite数据库支持的ListView(通过SimpleCursorAdapter)。我正在尝试实现功能,因此列表一次仅显示db查询中的某些元素。我已经通过在onCreate中加载数据库中的所有数据并在启动列表时使用首选的元素重写SimpleCursorAdapter的getCount方法来完成此操作。我也有一个按钮,可以将更多元素加载到列表中。这是通过更新getCount应返回的计数完成的。Android SimpleCursorAdapter - 限制ListView结果

这可以在添加更多列表视图行时正常工作,但是在单击按钮后,我看到列表中的内容出现奇怪的行为。我看到重复的列表元素和不正确的元素内容,它们是在我的bindview方法中设置的。我假设这与重写getCount方法有关(我确定你是一个更好的方法来执行“加载下一个25”函数),因为我没有看到这种行为,当我只显示整个数据库结果集并且不要重写该方法。

我想我的问题是,当你处理SimpleCursorAdapter时,我的问题是可以覆盖getCount方法导致bindview方法中有趣的行为?使用db查询结果来支持你的ListView,实现这种类型的功能的最好方法是什么?

在此先感谢...如果需要,我可以在明天回到笔记本电脑时提供代码片段。

+1

我不推荐。如果数据库包含少于#个条目,会发生什么情况?我想这可能会导致不可预知的行为。我会选择Flo的解决方案。 – spa 2011-03-09 09:47:10

我想你可以通过简单地使用不同的查询来获得结果来归档。 SQLite支持一个LIMIT operator,它可以返回查询的前n个结果。

所以,你的第一个查询看起来是这样的:SELECT [your columns] FROM [your table] LIMIT 25

而且当按下加载在未来25个结果按钮,创建一个新的查询与50的限制,并使用绑定导致光标移动到SimpleCursorAdapter changeCursor()方法。

+0

非常感谢您的帮助!我试图在db.query()调用的范围内工作,我不认为允许LIMIT参数,但我忽略了考虑只用直接SQL语句使用execSQL()方法。我将在我的代码中进行此更改,再次感谢!一个快速跟进问题......如果我使用这种方法,ListView是否会从光标的第一个结果开始回溯?换句话说,ListView会自动回滚到顶部,还是会保持用户靠近ListView停止的位置,并按下“Next x”按钮查看引入的新记录。 – 2011-03-09 18:04:51

+0

不客气。关于你的第二个问题,我不知道列表会如何反应,但我确定有一种方法可以让列表向下滚动到新查询之前的最后一项。虽然在ListView类的方法setSelection()和setSelectionAfterHeaderView()之前我从未使用过它们,但对于此问题看起来非常有希望。 – Flo 2011-03-09 18:31:43

+0

好吧,我会看看这些方法。谢谢。 – 2011-03-09 20:51:15