【发布时间】:2014-07-14 00:27:53
【问题描述】:
在我的应用程序中,我使用 Loader Manager 和 Content Provider 显示从数据库中查询的项目列表。结果附加到 SimpleCursorAdapter,然后显示在列表视图上。我希望能够加载,假设一开始最多 20 个项目,当滚动到该列表的末尾时,再加载 20 个项目。到目前为止,我使用了与此处类似的方法:
How to update listview whose data was queried from database through SimpleCursorAdapter?
即将查询结果限制为 20 并在 OnScrollListener 中适当地增加数量并使用新指令重新启动加载程序。 问题在于这句话:
incomeAdapter.swapCursor(data);
它完全重置适配器的数据,因此列表中只显示第二批项目。有什么方法可以简单地在现有项目之上加载其他项目?谢谢
编辑: 像这样合并游标:
if (incomeAdapter.getCursor() != null){
Log.v("Income Activity", "current adapter");
Cursor oldData = incomeAdapter.getCursor();
MergeCursor merge = new MergeCursor(new Cursor[] {oldData, data});
incomeAdapter.swapCursor(merge);
}
else {
Log.v("Income Activity", "no current adapter");
incomeAdapter.swapCursor(data);
}
抛出异常:
07-13 16:56:15.455: E/AndroidRuntime(5665): FATAL EXCEPTION: main
07-13 16:56:15.455: E/AndroidRuntime(5665): android.database.StaleDataException:
Attempting to access a closed CursorWindow.Most probable cause: cursor is deactivated
prior to calling this method.
编辑2: 根据请求,请求数据的代码:
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
orderBy = sortOrder + " LIMIT " + limitSkip + "," + limitCount;
CursorLoader cursorLoader = new CursorLoader(this,
DatabaseProvider.CONTENT_URI1, PROJECTION, null, null, orderBy);
return cursorLoader;
}
【问题讨论】: