更改CursorAdapter中的Cursor

时间:2011-08-30 15:37:19

标签: android sqlite exception cursor

我正在尝试以Cursor方式更改CursorAdapter

Cursor newCursor = compiledStatement.getCursor();
startManagingCursor(newCursor);
adapter.changeCursor(newCursor);

不幸的是,我得到了这个例外:

java.lang.IllegalStateException: attempt to re-open an already-closed object:
     android.database.sqlite.SQLiteQuery

根据其他主题,应该可以在不创建新内容的情况下更改CursorAdapter的内容。

2 个答案:

答案 0 :(得分:5)

我发现了这个问题。我的CursorAdapter实施了SectionIndexer,因此我必须覆盖changeCursor()方法并重置Cursor AlphabetIndexer

@Override
public void changeCursor(Cursor cursor) {
    mIndexer.setCursor(cursor);
    super.changeCursor(cursor);
}

答案 1 :(得分:2)

changeCursor()将关闭仍然由Activity管理的前一个Cursor,这可能是您获得异常的原因。在致电stopManagingCursor()之前,您可以尝试在旧光标上调用changeCursor()