問題タブ [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 に答える
2111 参照

android - Android カスタム ローダー、LoaderManagerImpl.LoaderInfo.callOnLoadFinished は 1 回だけ呼び出されます

アプリケーションでLoaderManagerの利点を使用できるように、独自のカスタム Androidローダーを実装しようとしています (アクティビティフラグメントのライフサイクルによるデータのロードの分離)。

私は最初にAsyncLoaderからサブクラス化することを検討しましたが、実際には AsyncTask にデータをロードする必要はありません(これはAsyncLoaderが内部で行うことです)。私の場合の基礎となるデータは、ネイティブ ライブラリからのデータ/サンプルです。これらのサンプルは、アプリケーションに対して完全に非同期のライブラリにキャッシュされるため、別のスレッド内でこのネイティブ キャッシュを反復処理する必要はありません。

私のカスタムローダーがどのように見えるかは、多かれ少なかれ次のとおりです。

Fragmentを使用して、 ArrayAdapterを使用してネイティブの日付サンプルを表示しています。

ADB Logcat トレース:

問題は、ローダーがデータの変更を正しく通知されるようになったことですが、LoaderManager.LoaderCallbacks onLoadFinished()コールバックに正しく配信されるのは初めてです。方向の変更後、同じ話です。最初の結果はonLoadFinished()に正しく到着しますが、ネイティブ レイヤーからの後続の更新はフラグメントに到達しません。

私はEclipseデバッグ機能を使用して問題を追跡し、LoaderManagerソースで見つけました(447-453行目:このコードはLoader.deliverResult => onLoadComplete [=> callOnLoadFinished => fragment update OK]内からトリガーされます):

mData != dataは初めてのようです(この場合はmData == nullであるため)。この条件の後続のヒットでは、mData == データは常に (そしてデータ オブジェクト/配列はネイティブ入力で正しく成長しています)、これは非常に奇妙ですLoaderManagerImpl。_

この条件が true の場合にのみcallOnLoadFinishedへの必要な呼び出しが行われ、フラグメントと arrayAdapter に基になる変更について正しく通知されるため、この問題が私を妨げています。

カスタムローダーで私が間違っていることを誰かが知っていますか、それとも基礎となるデータセットが常に変化している場合、カスタムローダーは本当に良い解決策ではありませんか?

前もって感謝します!バート

Android カスタム ローダーに関する参考資料: http://www.androiddesignpatterns.com/2012/08/implementing-loaders.html

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

android - CursorAdapter は、Android の CursorLoader によって提供される Cursor からどのようにデータをロードしますか?

連絡先を として表示する次のコードを実装しましたListViewMyAdapter伸びCursorAdapterます。

私が知りたいのは、adapter-によって提供された(呼び出し後に利用可能)mAdapterからデータを選択する必要があることをどのように知っているかということです。cursorCursorLoaderCursoronCreateLoader

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

android - Android: SQlite を使用した AutoCompleteTextView 用のアダプターはどれですか?

SimpleCursorAdapterを介してSQliteデータベースからAutoCompleteTextViewフィルタリング データ (約 3000 項目)を使用している古いアプリケーションがあります。

それは非常にうまく機能し、高速です。

SimpleCursorAdapter (Context context, int layout, Cursor c, String[] from, int[] to)しかし、私はそれが非推奨になっていることに気づきました。

ドキュメントには、代わりに「 LoaderManager with a CursorLoader 」を使用することをお勧めすると書かれています。ただし、LoaderManager/CursorLoader はコンテンツ プロバイダーに接続する必要があるようですが、この SQlite データはアプリでのみ使用され、他のアプリケーションと共有する必要がないため、これは必要ありません。

このトピックについて明確に説明していただけますか?

SQlite データを含む AutoCompleteTextViews に使用する推奨アダプターはどれですか?

どうもありがとう

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

android - Fragmentで次々とinitLoader

7つのローダーをロードする必要があるフラグメントがあります

onActivityCreate(); で

私はそれらすべてに対して initLoader を呼び出します。

メモリの問題のために、それらを1つずつ効率的にロードするにはどうすればよいですか?

私が考えていたこと

onActivityCreatedメソッドで最初のローダーをonLoadFinishedロードし、そのコールバック内で2番目のローダーをロードし、2番目onLoadFinishedinitLoader3番目などをロードします。いいですか?または、フラグメントのライフサイクルに関して何かが恋しいです。

注: 各ローダーが異なるデータ型を返すため、コールバックを 1 つ持つことはできません。

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

android - sqliteビューでローダーを更新するには?

LoaderManagerに問題がありました。sqlite データベースにいくつかのテーブルがあり、テーブルからデータを取得する表現ビューもあります。

その優れたガイドとまったく同じように、LoaderManagerも実装しましたが、テーブルに対して完全に機能します。

しかし、私は1つのテーブルを更新し、更新された結果をそこからではなく、更新されたテーブルに関連するsqliteビューから取得したいと考えています。この場合、LoaderManager は動作していないようです (onLoadFinished コールバックは発生しません)。

私の更新されたテーブルスキーマ:

私のsqliteビュー: