問題タブ [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.
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
android - CursorAdapter は、Android の CursorLoader によって提供される Cursor からどのようにデータをロードしますか?
連絡先を として表示する次のコードを実装しましたListView
。MyAdapter
伸びCursorAdapter
ます。
私が知りたいのは、adapter
-によって提供された(呼び出し後に利用可能)mAdapter
からデータを選択する必要があることをどのように知っているかということです。cursor
CursorLoader
Cursor
onCreateLoader
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 に使用する推奨アダプターはどれですか?
どうもありがとう
android - Fragmentで次々とinitLoader
7つのローダーをロードする必要があるフラグメントがあります
onActivityCreate(); で
私はそれらすべてに対して initLoader を呼び出します。
メモリの問題のために、それらを1つずつ効率的にロードするにはどうすればよいですか?
私が考えていたこと
onActivityCreated
メソッドで最初のローダーをonLoadFinished
ロードし、そのコールバック内で2番目のローダーをロードし、2番目onLoadFinished
でinitLoader
3番目などをロードします。いいですか?または、フラグメントのライフサイクルに関して何かが恋しいです。
注: 各ローダーが異なるデータ型を返すため、コールバックを 1 つ持つことはできません。
android - sqliteビューでローダーを更新するには?
LoaderManagerに問題がありました。sqlite データベースにいくつかのテーブルがあり、テーブルからデータを取得する表現ビューもあります。
その優れたガイドとまったく同じように、LoaderManagerも実装しましたが、テーブルに対して完全に機能します。
しかし、私は1つのテーブルを更新し、更新された結果をそこからではなく、更新されたテーブルに関連するsqliteビューから取得したいと考えています。この場合、LoaderManager は動作していないようです (onLoadFinished コールバックは発生しません)。
私の更新されたテーブルスキーマ:
私のsqliteビュー: