問題タブ [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 - ダイナミックローダーを使用して、ListFragmentsなしでViewPagerにListViewページをロードするためのパターン?
特定のページ数のを持っている場合ViewPager
、フレームワークを使用して各ページのデータをロードするための最良の方法は何でしょうLoader
か?各ページには、独自のアダプタインスタンスを持つListViewが含まれています。
- ページごとに個別のローダーを使用します。また
- ロードされていないページをチェックしてロードするシングルローダーを使用する
重要なのは、ユーザーが大量のページをすばやくスワイプしたい場合があるため、パフォーマンス上の理由で不要なページの読み込みを簡単に「キャンセル」できるはずです。
一方で、ローダーが多いとオーバーヘッドが発生する可能性があります。
編集:私Loader
は実際に、ロードしているコンテンツを表すために動的IDを持っている必要があります。おそらくローダーIDにマスクを使用して、ローダーが完了したらを呼び出しますdestroyLoader()
。
android - ViewPagerを使用するFragmentActivityからListFragmentでローダーを再起動する方法は?
私はViewPager
FragmentActivity
3つのタブを保持するを持っています、タブのそれぞれはListFragment
ローダーを持っているです。このアクティビティの初期化では、すべてのローダーがロードされますが、これまでのところ良好です。
refresh()
ローダーを再起動するフラグメントにパブリックメソッドを実装しました。getLoaderManager().restartLoader(0, null, this);
親アクティビティから呼び出すと、スローされillegalStateException Fragment not attached to Activity
ます。ローダーを再起動するにはどうすればよいですか?
編集:
私のアクティビティは拡張され、その中には、ポケットベルのタブを管理するためにSherlockFragmentActicity
拡張されるアダプタがあります。FragmentPagerAdapter
現在、タブフラグメントは次のとおりです。
android - ローダー API の使用時に FragmentStatePagerAdapter が UI 要素を設定しない
そのため、ローダー API で FragmentStatePagerAdapter を使用しようとすると、この問題が発生しましたが、UI に値が設定されていません。つまり、onLoadFinished() が完了し、値が TextView、ImageView、および changeCursor に設定されていることを意味します。 XML で設定したとおりの UI が表示されます。
問題を明確に説明できるかどうか見てみましょう。
リストがあり、アイテムをタップすると詳細ビューが表示されます。アイテムが選択されると、ids 配列と選択されたアイテムの位置の 2 つの要素が詳細に送信されます。
したがって、DetailActivity には、ID と位置を使用して適切なデータをロードする FragmentStatePagerAdapter を持つ ViewPager があります。
そして、DetailPagerAdapter オーバーライド getItem と getCount (ids.length を返す)
DetailFragment では、newInstance がこれを行います
public static DetailFragment newInstance(long id) { DetailFragment f = new DetailFragment();
および onLoadFinished が呼び出されたとき。
android - Android ローダーが画面の回転時にコールバックをトリガーしない
を使用していAsyncTaskLoader
ます。実装したアクティビティがありますLoaderCallbacks
(サポート ライブラリ)。
ブレークポイントをデバッグしてログに記録すると、ローダーは結果を配信しますが、2 回目はコールバックonLoadFinished
がトリガーされません。奇妙なことに、もう一度回転すると機能します。どの方向から始めても、戻ったときにコールバックを取得します。
私の活動でonResume
:
私のローダーで:
これには本当に困惑しています。私は Android を初めて使用するので、他の人にとっては明らかなことかもしれません :)
java - 単純な AsyncTaskLoader を実装するにはどうすればよいですか?
私の最近のSOの質問の1つで、誰かがLoader
私のソリューションに使用することを提案しました. だからここで私は単純なものを実装する方法を理解しようとしていますAsyncTaskLoader
これが私が思いついたものです:
それが私が理解したすべてです。のドキュメントを読みましたAyncTaskLoader
が、そのような不可解で面倒なものに出会ったことはありません。何百万ものメソッドがあり、それらはすべて互いに相反するものであり、それらを見ると、それらが呼び出される順序、またはそれらをオーバーライドして呼び出す必要があるかどうかを推測することは不可能です. このタスクのライフサイクルは悪夢です。
私が探しているのは、単純にデータをスクレイピングして返すことです。また、すべてのデータを再度スクレイピングすることなく、次回すぐに返すことができるように、クラス変数に保存したいと思います。
開いているカーソル、ストリームなどはありません。単純な変数が呼び出されるだけですlstEvents
(これは大きい可能性があります)。メモリをリークしてリソースを浪費したくないので、このタスクをいつどこで機能させるために何を閉じる/無効にする必要があるかを誰かが説明してくれるとうれしいです。
クラス変数のどこにデータを格納すればよいですか? メソッドの最後でそれを行うべきですかloadInBackground
、それともメソッドでこれを行うべきdeliverResult
ですか?
この単純なシナリオでは、タスクがキャンセルされたかどうか、またはリセットされたかどうかを確認する必要がある場所はありますか?それとも、単にこれらのメソッドをオーバーライドしてAsyncTaskLoader
処理させないでください。
誰かが知っていれば、いくつかの足場コードが役立ちます。ありがとうございます。
android - カスタム カーソル アダプター、カスタム ビュー、およびカーソル ローダー
カスタム ビュー (リスト ビューではない) でカーソル ローダーを使用することは可能ですか?
リスト ビューを使用したカスタム カーソル アダプターの例を次に示します。
リスト ビューの代わりに、カスタム ビューを作成したいと考えています。カーソルは、ビューに入力される 1 つのレコードを戻します。
どうすればいいですか?
java - 長期間使用しないと、新しいローダーを作成できません
Fragment
データをフェッチするためにローダーに依存しているAndroidアプリケーションがあります。以下は私ののスケルトンコードですFragment
。onLoadFinished
メソッドにカスタムコードがあることを除いて、すべて同じです。
これは、そのFragmentPagerAdapter`を取得するを使用するFragment
内部で使用されます。FragmentActivity
ViewPager
Fragment´s using a
これは正常に機能し、上記のようにページ間を移動できますFragment
。Fragment
にnewが追加されるたびViewPager
に、onCreate
メソッドが起動し、newが作成されますLoader
。
携帯電話の「ホーム」ボタンを押すと、アプリケーションが一時停止してバックグラウンドになります。私はいつでもアプリケーションを復元でき、バックグラウンドで5/10/20分経過した後でも問題なく動作します。
...しかし、アプリケーションをバックグラウンドで1時間以上長時間放置すると、起動時にアプリケーションがクラッシュし、スタックトレースがonCreate
メソッドの次の行を指します。
今、私はなぜこれが起こっているのかについて非常に迷っています。Androidフレームワークは、バックグラウンドで長期間非アクティブになった後、バックグラウンドで何かを破壊しているようで、initLoader
メソッドはを作成できませんLoader
。メソッドに関するドキュメントには、initLoader
具体的に次のように記載されています。
ローダーが初期化されてアクティブになっていることを確認します。ローダーがまだ存在しない場合は、ローダーが作成され、(アクティビティ/フラグメントが現在開始されている場合)ローダーが開始されます。それ以外の場合は、最後に作成されたローダーが再利用されます。
私がここで間違っていることを誰かが指摘できるでしょうか?これは、自由に複製できないため、デバッグが非常に難しい問題のようです。それは非常にランダムです。ありがとう
logcatからのスタックトレース:
android - カスタム AsyncTaskLoader クラスが forceLoad の呼び出しを受け入れない
これはちょっと変わった問題です。AsyncTaskLoader (互換性レベルではなく API レベル 11 をターゲットとする実際の取引) を拡張するクラスを使用して、別のアプリ コンポーネントから送信されたインテントを受信し、ローカル データベースからデータをダウンロードして応答します。メイン アクティビティの onStart メソッドで LoaderManager を使用してローダーを初期化します。
最初に起動したとき、ローダーは正常に動作します。以下は、発生する一連のイベントです。 Activity.onCreateLoader - ローダー コンストラクター - Loader.onStartLoading - Loader.loadInBackground - Activity.onLoadFinished - Loader.deliverResult
ただし、アクティビティを終了して再起動を繰り返すと、最終的には期待どおりに動作しなくなります。これは次のシーケンスになります: Activity.onCreateLoader - ローダー コンストラクター - Loader.onStartLoading - 何もない
Loader.onStartLoading 内に forceLoad の呼び出しがありますが、後者の場合は何もしていないようです。私が検索したすべての場所は、forceLoad を呼び出すことは、ローダーがその作業を開始するための防弾に近い方法であると言っているようですが、単に何もしないケースに遭遇し続けています。ローダーのプロパティは、いずれの場合も同じです (isStarted、isAbandoned、および isReset は関係なく同じ結果になります)。率直に言って、ローダーが正常に動作する場合と何もロードされない場合とで、ローダーに違いは見られませんでした。
android - あるフラグメントで作成されたローダーに別のフラグメントからアクセスする
かなり標準的なフラグメント レイアウトのアプリがあります。左側の展開可能なリストビュー フラグメントと右側のパネルは、左側のリストでユーザーが選択した操作 (データの表示、新しいデータの追加など) に応じてさまざまな目的で使用されます。
loaderex
標準の CursorLoader を使用できるようにデータベース用のコンテンツ プロバイダーを作成する必要がないため、CommonWare のライブラリで LoaderManager (初めてローダーを使用) を使用しています。このセットアップは、私のリストを表示するのに最適です。
私が抱えている問題は、2 番目のフラグメントを使用してデータベースにデータを追加するときです。最初のフラグメントでリストの再読み込みをトリガーする方法がわかりません。私の人生では、データを再度プルする必要があることを認識できるように、2番目のフラグメントからローダーを取得する方法を理解できません。また、再ロードを手動でトリガーする方法も理解できないようです.
ローダーを使用するのはこれが初めての試みであるため、何か不適切なことをしている場合は、(穏やかに) より良いパスにリダイレクトされることを嬉しく思います。
フラグメント 1
フラグメント 2
android - Androidでローダーを介してレコードを挿入する
この質問は、Content Resolver vs Cursor Loader の質問からのフォローアップです。回答には、 Content Resolver を使用して sqlite Db にレコードを挿入する方法が明確に記載されています。私の質問は次のとおりです。
- この機能を実装するためにローダー (通常のローダー) を使用できますか?
例:
これにより、メイン UI スレッドまたはワーカー Thread で機能が実行されますか。コンテンツ リゾルバは data を含むカーソルの代わりに URI を返すため、これに対するコールバックを受信しないことを理解しています。
このコードを実行してみましたが、動作がおかしいです..重複した挿入が記録され、一貫性がありません.ローダーを使用して挿入操作を行う適切なリソースを誰かに教えてもらえますか(クエリの例で多くの例を見てきましたが、動作します魔法のように :) )
ありがとうございました。