私は自分が達成しようとしていることから始めます。
DB からデータを取得するために LoaderCallbacks が関連付けられた ListFragment があります。データは AsyncTask を使用してダウンロードされ、DB に挿入されます。ユーザーがリストの一番下に到達すると、CWAC-Endless ウィジェットを使用して AsyncTask が開始され、さらにデータがダウンロードされます。
私はここでいくつかの問題に直面しており、これを解決しようと何晩も試みましたが、助けを求めるためにここに来ることにしました。
最初の問題は configChanges です。ユーザーがデバイスを回転させると、アクティビティが破棄され、すべてのフラグメントが再作成されます。setRetainInstance を true に設定できることはわかっていますが、Activity が破棄されたときに AsyncTask がまだ実行されているため、これは役に立ちません。
2 つ目の問題は、ローダーに関するものです。データがダウンロードされ、AsyncTask が正常に完了すると、アイテムがリストに正常に表示されます。DBに20個のアイテムがあるとしましょう。ユーザーがデバイスを回転させ、フラグメントが再作成されると、ローダーを再度関連付ける必要があります。これが発生すると、データはすぐにリストにロードされず、代わりにダウンロードの AsyncTask が開始されます。これは、CWAC-Endless アダプターがリストの最後の項目にあると見なすためです。
これらの問題は両方とも私を疲れさせました。どこにも行けないので、これを一新する必要があります。
どんな提案でも構いません。必要に応じてソース コードを投稿できます。
編集
いくつかの提案に役立ついくつかの詳細を次に示します。
インターネットからデータをダウンロードしていますが、一度に設定された数のアイテムのみが返されます。次に、必要なときに追加のデータを要求する必要があります (ページネーション)。
データベースを使用することにしました。新しいローダー機能により、データが効率的かつ一貫してロードされ、スレッドの問題が発生しないことを確認することが非常に簡単になるためです。Loader アプローチを捨てて、標準の Adapter を使用してデータをレンダリングすることが理にかなっている場合は、このアプローチを捨ててそれを使用することに満足しています。この解決策が非常に難しい理由について、誰かが洞察を提供できるかどうかを知りたかっただけです。
ありがとう、
アダム