sql >> データベース >  >> RDS >> SQLite

Android-すでに閉じられているオブジェクトを再度開こうとします:loaderManagerを使用してSQLiteQuery

    フォーマットが不十分なため、コードを理解するのは少し難しいです。

    とにかく、提供された答えは実際には修正ではありません。 onLoadFinishedにカーソルが戻りました 閉じられないことが保証されている必要があるため、間違った方法でカーソルをロードしています。具体的には、電話するとき

    adapter.getFilter().filter(s.toString());

    ここで何が起こっているのかはよくわかりませんが、他のことをする必要があることは理解しています。 Fragment内のフィールドにクエリフィルターを保存するだけです getLoaderManager().restartLoader(DRINKS_LIST_LOADER, null, this);を実行します。 。 restartLoaderを実行することに注意してください 、initLoaderではありません 、クエリするデータが異なるためです。

    onCreateLoaderselectionのインスタンス変数として保存したフィルターを使用する必要があります 。

    いくつかの背景

    initLoader 以前に実行したことがある場合は、前回の実行でロードされたデータをロードします。これが、フラグメント/アクティビティの初期化メソッドを呼び出す理由です。向きの変更時に再クエリする必要がないため、これは便利です。

    restartLoader 以前にロードされたデータをクリーンアップして、新しいLoaderを取得します (おそらく)異なるデータを処理するため。

    まだ何をしているのかよくわからない場合は、この記事を必ず読んでください。これは、達成したいものと非常によく似たサンプルコードを備えたローダーに関する非常に優れた入門記事です。ローダーは最初はかなり謎めいたものですが、一度コツをつかめばスムーズに航行できます。



    1. データベースのメンテナンスを容易にするためのモデル化方法

    2. SSMS 2019(v18)の拡張機能を作成する方法

    3. SQLclでクエリ結果をフォーマットする2つの方法(Oracle)

    4. 特定の列名を持つMySQLのすべてのテーブルを見つけるにはどうすればよいですか?