フォーマットが不十分なため、コードを理解するのは少し難しいです。
とにかく、提供された答えは実際には修正ではありません。 onLoadFinished
にカーソルが戻りました 閉じられないことが保証されている必要があるため、間違った方法でカーソルをロードしています。具体的には、電話するとき
adapter.getFilter().filter(s.toString());
ここで何が起こっているのかはよくわかりませんが、他のことをする必要があることは理解しています。 Fragment
内のフィールドにクエリフィルターを保存するだけです getLoaderManager().restartLoader(DRINKS_LIST_LOADER, null, this);
を実行します。 。 restartLoader
を実行することに注意してください 、initLoader
ではありません 、クエリするデータが異なるためです。
onCreateLoader
、selection
のインスタンス変数として保存したフィルターを使用する必要があります 。
いくつかの背景
initLoader
以前に実行したことがある場合は、前回の実行でロードされたデータをロードします。これが、フラグメント/アクティビティの初期化メソッドを呼び出す理由です。向きの変更時に再クエリする必要がないため、これは便利です。
restartLoader
以前にロードされたデータをクリーンアップして、新しいLoader
を取得します (おそらく)異なるデータを処理するため。
まだ何をしているのかよくわからない場合は、この記事を必ず読んでください。これは、達成したいものと非常によく似たサンプルコードを備えたローダーに関する非常に優れた入門記事です。ローダーは最初はかなり謎めいたものですが、一度コツをつかめばスムーズに航行できます。