0

ダイアログに ListView があり、CustomerCodes のリストをフィルター処理するための EditText があります。TextWatcher を使用してフィルター クエリを実装し、onTextChanged() で古い Cursor を次のように変更しました。

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.

カーソルを変更すると古いカーソルが閉じられることはわかっていますが、古いカーソル (または別のソリューション) で StopManagingCursor を使用してこの問題を解決する方法がわかりません。onTextChanged() でこのコードを試しましたが、そうではありませんどちらかで働く

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

助けていただければ幸いです、ありがとう

4

1 に答える 1

1

stopManagingCursor()廃止され、推奨されなくなりました。を使用する必要がありますCursorLoader。次に、メソッドSimpleCursorAdapterと一緒にa を使用できます。swapCursor(Cursor)

現在のセットアップを使用する必要がある場合は、それを実行できるはずですCpListadapter.getCursor().close()(たとえば、 でonDestroy())。

于 2013-01-05T07:52:09.860 に答える