問題タブ [android-loader]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
724 参照

android - ローダー: onLoadFinished は 1 回だけ呼び出されます

アクティビティで使用されているローダーが 1 つあります。ローダーを開始でき、onLoadFinished が呼び出されます。データを更新onContentChangedしてローダーを呼び出すと、それが表示されloadInBackgrounddeliverResult両方が呼び出されます。ここでトレイルが停止するようです。へのコールバックがありませんonLoadFinished

アクティビティを再作成すると (別名、向きの変更または再起動)、同じように動作します。

support-v4 ローダーとローダー マネージャーを使用しています。

のCommonsWareのローダ​​ーSharedPreferenceLoaderに基づいています:

ローダーの使用方法は次のとおりです。

更新LoaderManagerソース でこれを見つけました。onLoadFinishedデータに同じ参照がある場合、への呼び出しが呼び出されないように見えます。

0 投票する
1 に答える
1715 参照

android - Androidの連絡先ローダーから電話番号を取得する:プロジェクションクラッシュ

Google チュートリアルのサンプル コードを使用しています。投影は、収集したいデータを指定する場所です。電話番号が必要であることを指定するにはどうすればよいですか? Google のサンプルは電話番号を取得しません。しかし、電話番号を取得したいので、 のフィールドを追加します Phone.NUMBER。しかし、そうすると、アプリは常にクラッシュします。これが私の予測です。

ここにエラートレースがあります

0 投票する
1 に答える
932 参照

android - データベースの変更時に CursorLoader が更新されない

CursorLoaderをロードする非常に平野がありますCursor。カーソルをアクティビティのフィールドとして保存します。(そうではありませんCursorAdapter!)

を呼び出すとContentResolver.notifyChange(URI_BUNDLES, null)、CursorLoader がリロードされると思いますが、そうではありません。(LoaderCallbacks以下を参照してください。コールバックをログに記録します。)

この問題をデバッグするために、奇妙なことに動作する小さなContentObserverを登録しました。

ここからデバッグする方法がわからないことを知っています。私のCursorLoader初期化は問題ありませんContentObserverが、何らかの理由でCursorLoader、基になるデータベースが変更されたときにカーソルをリロードしません。何が間違っている可能性がありますか?


これが私のものLoaderCallbacksです:

0 投票する
0 に答える
221 参照

android - OnLoadFinished で swapCursor を呼び出すときの長い遅延

LoaderCallbacks を持つカスタマイズされた CursorAdpater を含む ListView を実装しています。OnCreatLoader が呼び出されると、DB から theCursor を取得する AsyncTaskLoader を実行しています。カーソルがロードされた後に swapCursor を呼び出すと、遅延があることに気付きました。一度に10個のアイテムをロードするような解決策はありますか?もしそうなら、どこでこれを行うことができますか?

0 投票する
2 に答える
7079 参照

android - フラグメントが再開された後に onLoadFinished が再度呼び出されるのはなぜですか?

ローダーに特有の問題があります。現在、これが私のコードのバグなのか、ローダーを誤解しているのかはわかりません。

アプリ

この問題は会話で発生します (Whatsapp に似たものを想像してください)。私が使用するローダーは、 AsyncTaskLoader の例に基づいて実装されています。サポートライブラリを使用しています。

  • OnCreate では、キャッシュされたメッセージを取得するローダーを開始します。
  • CachedMessageLoader が終了すると、RefreshLoader を開始して最新のメッセージを (オンラインで) 取得します。
  • 個別の ID としての各ローダー タイプ (たとえば、offline:1 online:2)

これは、次の例外を除いて、非常にうまく機能します。

問題

別のフラグメントを開き (そしてトランザクションをバックスタックに追加し)、Back-Key を使用して conversationFragment に戻ると、以前の両方の結果でonLoadFinished再度呼び出されます。この呼び出しは、フラグメントがローダーを再度開始する前に発生します...

以前に取得した「古い」結果を配信すると、メッセージが重複します。

質問

  • それらの結果が再度配信されるのはなぜですか?
  • これらのローダーを間違って使用していますか?
  • 結果を「無効化」して、結果が 1 回だけ配信されるようにすることはできますか? それとも、自分で重複を排除する必要がありますか?

呼び出しのスタック トレース

更新 1 ここで言及されているローダーは、会話フラグメントによって開始されます。

更新 2 My MainActivity (最終的にすべてのフラグメントをホストする) は、SherlockFragmentActivity をサブクラス化し、基本的に次のようなフラグメントを起動します。

会話フラグメントは、次のように「表示プロファイル」フラグメントを開始します。

0 投票する
2 に答える
244 参照

android - ローダーの動作を確認する方法

ローダーがどのように動作しているかを確認しますか? isStared()私を助けないでください。返却後onLoadFinished() isStarted()は必ずtrue