2011-08-30 41 views
4

我试图以这种方式改变CursorAdapter中的Cursor更改CursorAdapter中的Cursor

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的内容而无需创建新的内容。

回答

5

我发现了这个问题。我的CursorAdapter执行SectionIndexer,所以我不得不编写changeCursor()方法并重置CursorAlphabetIndexer

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

这解决了我的问题,但现在垃圾收集器变得疯狂了。我与一个非常长的光标合作,每次都在重新创建。任何建议? –

2

changeCursor()将关闭以前的Cursor,它仍然由Activity管理,这可能是您得到异常的原因。在致电changeCursor()之前,您可能会尝试在旧光标上拨打stopManagingCursor()

+0

我有同样的想法,所以我已经尝试过它,并有相同的结果:尝试重新打开一个已经关闭的对象。 – sealskej