2013-01-05 30 views
0

我在對話框中有一個ListView和一個EditText來過濾我的CustomerCodes列表,我已經實現了我的過濾器查詢與TextWatcher和onTextChanged()我已經改變了我的舊光標更改光標導致異常

Cursor FilteredCPCodeList = CustomerDBAdapter.instance.CursorFilteredCPCode(s.toString()); //Retrieve Filtered CustomerCodeList 
CpListadapter.changeCursor(FilteredCPCodeList); 

名單過濾可以完美兼容上面的代碼,但是當我在一個ListItem點擊它OnItemClickListener其使用舊的光標會導致異常通知:

01-05 10:33:01.577: E/AndroidRuntime(5380): android.database.StaleDataException: Attempting to access a closed CursorWindow.Most probable cause: cursor is deactivated prior to calling this method. 

我知道,改變光標將關閉我的老光標,但我不知道如何在我的舊c上使用StopManagingCursor ursor(或其他soloution)來解決這個Issue.i've試過onTextChanged(此代碼),但它不工作,要麼

Cursor OldCursor = CpListadapter.getCursor(); 
stopManagingCursor(OldCursor); 

任何幫助,將不勝感激,謝謝

回答

1

stopManagingCursor()已被棄用,不再推薦。你應該使用CursorLoader。然後,您可以使用SimpleCursorAdapter以及swapCursor(Cursor)方法。

如果您需要使用當前設置,則應該可以執行CpListadapter.getCursor().close()(例如,在您的onDestroy()中)。

+0

謝謝oleg用swapcursor替換更改光標解決了我的問題。 –

+3

是的,與'changeCursor()'不同,'swapCursor()'不會關閉原始文件。請注意,除非您使用兼容性庫中的'android.support.v4.widget.SimpleCursorAdapter',否則它需要API 11。 –