問題タブ [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 - フラグメントがアタッチされるたびにローダーを再初期化する必要がありますか?
Loaderがすでに初期化されていFragmentて、同じFragmentものがに追加されている場合、明示的にを呼び出さなくても、フラグメントがアタッチされるたびFragmentManagerにメソッドが呼び出されることに気付きました。Loader onLoadFinishedgetLoaderManager().initLoader(0, null, this)
Loaderこれは、aが初期化されると、が再作成されない限り、実際に再度初期化する必要がないことを意味しFragmentますか?
android - Android: WebView で JavaScript ファイルを含む単純な html データを読み込めませんか?
私のプロジェクトでは、フュージョン チャートを使用しています。上記のコードサンプルのように、html文字列データを作成してWebViewにロードしています。このhtmlファイルをブラウザで実行すると実行され、Fusionチャートになりますが、Android Webビューでこれを行っていると、Webビューにロードされません。私はすでにJavaScriptを有効にしています。javascript ファイルを assets フォルダーに貼り付けます。
android - ローダーを使用した TabsPager の複数のフラグメント、スワイプは機能しますが、クリックは機能しません
私はActionBarSherlock の例を使用して構築しています。各タブに 1 つずつ、3 つのフラグメント(それぞれ extendsSherlockListFragmentと implement ) があります。それらはすべてローダーを使用します。タブ 2 と 3 は同じローダー クラスを使用しています (これは問題ではないと思います)。LoaderManager.LoaderCallbacks<>
FragmentPagerAdapter必要に応じてバンドルとともに、さまざまなフラグメントへのクラス参照を使用して、タブを my に追加します。アプリケーションが起動してタブ 0 が表示されると、 getItem のFragmentPagerAdapterタブ 0 とタブ 1 がフラグメントを作成して準備が整います。タブ 2 はまだ作成されていません。タブ 1 にスワイプすると、タブ 2 が読み込まれます。もう一度スワイプすると、タブ 2 が正しく表示されます。
タブ 0 からタブ 2 をクリックすると問題が発生します。getItemフラグメントを作成し、ローダーがdoInBackground処理を開始しますが、タブ 2 のフラグメントはonLoadFinished でデータを取得しないため、無期限のプログレスバーが表示されたままになります。
奇妙なことが以前に起こりました。クリックすると、タブ 2onLoadFinishedがタブ 0 のローダーからデータを受け取ります。各タブのフラグメント ローダーを別の ID を使用するように変更すると (同じ ID であっても衝突する必要はないと思います)、その問題はなくなりました。例: getLoaderManager().initLoader(0, null, this)、getLoaderManager().initLoader(1, null, this)など。それがローダーやその他のことについての私の無知を示しているだけなのかどうかはわかりません。
主な質問は、 にFragmentPagerAdapterすべてのタブを一度にロードさせることはできますか? それを行っても、おそらく私のコードでこのバグを完全に排除することはできません。
二次的な質問:スワイプして更新をクリックすると(それが何をするかについては以下のコードを参照)、最終的にアクションバーの更新ボタンが消えます。何かご意見は?
MainActivity (リンクされた ABS の例と非常によく似ています):
Tab0 フラグメント (他のフラグメントと非常に似ているため、他のフラグメントは省略します):
Tab0 ローダー (他のローダーと非常によく似ているため、他のローダーは省略します):
アダプターは非常に基本的なものであり、問題はないと確信しています。誰かに尋ねられたら、もっとコードを提供できますが、これで十分だと思います。 助けてくれてありがとう。
アップデート:
単純に置き換えるFragmentPagerAdapterとFragmentStatePagerAdapter機能します。FragmentPagerAdapter getItem is not calledで参照されているのを見ました。私のコードと使用の何が問題になっていますFragmentPagerAdapterか?
android - CursorLoader が間違った ContentProvider に接続している
問題
CursorLoader のインスタンス化は、引数として渡された URI ではなく、以前の CursorLoader の URI を使用しているようです。
次のエラーが発生しています:
クラス
- DeckIndex.java - データベースの「デッキ」テーブルを照会し、デッキの Cursor 配列を返します。
- DeckShow.java - データベースの「フラッシュカード」テーブルをクエリし、フラッシュカードの Cursor 配列を返します。
- AuducardOpenHelper.java - データベースの DDL と作成を担当します。
- DecksProvider - 「デッキ」テーブルの CRUD を担当
- FlashcardsProvider - 「flashcard」テーブルの CRUD を担当
説明
渡される URI:
これが FlashcardsProvider ではなく、DecksProvider によって処理されていることは事実です。
そして、FlashcardsProvider の UriMatcher:
DecksIndex クラスが最初に呼び出されるため、DeckProvider への呼び出しが正常に完了することに言及することが重要だと思います。DeckShow onCreate メソッドが呼び出されるのは、(DeckShow アクティビティを開始する) デッキの 1 つをクリックするまでではありません。
とエラーが発生します。
LoaderManager の初期化行:
DeckIndex.java
DeckShow.java
私の質問をご覧いただきありがとうございます。追加の詳細やコードが役立つかどうかお知らせください。
android - さらに読み込む - ビュー階層を作成した元のスレッドのみがそのビューにアクセスできます
私のアプリは GridView を使用して JSON から画像を取得しています。すべて問題ありませんが、ボタンをクリックしてさらにロードできるようにしたいと思います。このチュートリアルAndroid ListView with Load More Buttonに従いました。私がそれをたどったとき、私はで使用runOnUiThread(new Runnable() {
public void run() { } }しましたが、UIスレッドで実行しているため、これを知ってdoInBackgroundいたエラーです。NetworkOnMainThreadExceptionしかし、私が削除するrunOnUiThread...と、それもエラーになります
このエラーを修正するにはどうすればよいですか? 完全なソースhttp://pastie.org/5659969
最初のロード時の AsyncTask
ボタンを使用してクリックしてさらにロードするときの AsycTask
android - Android ローダーのライフサイクル、または: onStopLoading() は常に onReset() の前に呼び出されますか?
直前にonReset()呼び出さずに呼び出される場合はありますか?onStopLoading()
より一般的には、ローダーのライフサイクル、a-laアクティビティ ライフサイクルチャート、およびonSomething()アクティビティ/フラグメントのライフサイクル状態のどの状態で実行されるかを把握しようとしています。
android - ContentProviderのSimpleCursorAdapterでIllegalStateException「すでに閉じられているオブジェクトを再度開くことを試みます」
アクティビティのからを取得するによって入力されている一連のListViewオブジェクトがFragmentsにあります。私が理解しているように、すべてのデータベースとクローズアクションは、とによって完全に処理されるため、コードのどの時点でも、私は何も呼び出していません。CursorAdapterCursorLoaderManagerCursorLoaderManagerContentProvider.close()
ただし、次の例外が発生する場合があります。
CursorAdapterいつ呼び出されるかgetView(...)、getItem(...)またはgetItemId(...)呼び出されているかを示すログコードを自分に挿入しました。これは、別のアダプターgetView(...)で多くの秒が発生した後、特定のアダプターで最初に発生しているように見えます。getView(...)また、ユーザーがアプリ内を何度も移動した後にも発生します。
Cursorこれにより、アダプタのforがに保持されているのに、またはCursorAdapterによって誤って閉じられているのではないかと思います。これは可能ですか?アプリ/アクティビティ/フラグメントのライフサイクルイベントに基づいてハウスキーピングを行う必要がありますか?ContentProviderLoaderCursorAdapter
ContentProviderクエリメソッド:
典型的なLoaderCallbacks:
CursorAdapterコンストラクタ:
私はこの質問を読みましたが、残念ながら、私が使用していることを示唆しているだけなので、私の問題に対する答えは得られていませんContentProvider。
IllegalStateException:すでに閉じられているオブジェクトを再度開こうとします。SimpleCursorAdapterの問題
明らかになったばかりの重要な新しい情報
プロジェクトの他の場所で、sを使用しておらず、 sを適切Loaderに管理していない他のコードを発見しました。Cursor上記と同じパターンを使用するようにこのコードを切り替えました。ただし、これで問題が解決した場合Cursorは、プロジェクトの一部で管理されていない場合、他の場所で適切に管理されているプロジェクトを強制終了する可能性があります。
くっつき回る。
新しい情報の結果
それはそれを修正しませんでした。
新しい考え
つまり、おそらくそうです、私は(またはライフサイクルイベントに沿って)ハウスキーピングを行う必要があります。CursorAdapterCursorLoader
新しいアイデアの成果
いいえ。
前のアイデア
ちょっとした調整を加えると、動作することがわかりました。ただし、非常に複雑なので、おそらく質問全体を書き直す必要があります。
android - 時期尚早にcursor.close()を呼び出す以外に、何がStaleDataExceptionを引き起こす可能性がありますか?
私は現在、Androidアプリを大幅に変更/書き直しています.次の行に沿って非常に時折クラッシュするのを見てきました:CursorAdapterメソッドが呼び出され、それが呼び出されますAbstractWindowedCursor#checkPosition().
問題は、s を閉じていないことですCursor。すべてCursorの は から来て、CursorLoaderによって生成されますContentProvider。からCursoreach それぞれにを渡し、for に通知を登録し、eachからに通知しています。要するに、使用中に a が閉じる理由が見つかりません。CursorAdapterLoaderCallbacksCursorContentProviderContentResolverinsert(...)delete(...)update(...)Cursor
だから:他の原因は何StaleDataExceptionですか?
android - async ListFragment の正しいアプローチ
私はAndroidにかなり慣れていないため、次のことを達成するための正しい/最良の方法を見つけるのが難しいと感じています:
ActionBarSherlock を使用して、それぞれがフラグメントをロードする一連のタブを作成しています。これらの 1 つは ListFragment (実際には SherlockListFragment) です。新しいスレッドを使用してリストをロードすることから始めましたが、リストがロードされる前に別のタブに切り替えるまで、すべて問題ないように見えました。次に、フラグメントがアクティブではないと推測するため、 SetListShown(true) で失敗します。
私がやりたいのは、タブが初めて開かれたときにデータの読み込みを開始し、標準の進行状況インジケーターを表示してから、リストが表示され、進行状況インジケーターが削除されることです。データの読み込み中にタブが変更された場合、そのタブが再び開かれたときに表示されるはずです。
私が見逃していたこれを達成する簡単な方法があれば、素晴らしいです! Androidではそれは不可能です。私もそれを知りたいので、試すのをやめることができます;-)
AsyncTask、AsyncTaskLoader、IntentService などについて多くのことを読みましたが、何を使用する必要があるのか まったく明確ではなく、これらのいずれかが実際に私が望むものを達成するでしょう!
参考までに、私はAndroid用のモノとv2.3+をサポートする互換パックを使用していますが、Javaの例などを翻訳できることを願っています.
よろしくお願いします!ロビン