問題タブ [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
onLoadFinished
getLoaderManager().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
オブジェクトがFragment
sにあります。私が理解しているように、すべてのデータベースとクローズアクションは、とによって完全に処理されるため、コードのどの時点でも、私は何も呼び出していません。CursorAdapter
Cursor
LoaderManager
Cursor
LoaderManager
ContentProvider
.close()
ただし、次の例外が発生する場合があります。
CursorAdapter
いつ呼び出されるかgetView(...)
、getItem(...)
またはgetItemId(...)
呼び出されているかを示すログコードを自分に挿入しました。これは、別のアダプターgetView(...)
で多くの秒が発生した後、特定のアダプターで最初に発生しているように見えます。getView(...)
また、ユーザーがアプリ内を何度も移動した後にも発生します。
Cursor
これにより、アダプタのforがに保持されているのに、またはCursorAdapter
によって誤って閉じられているのではないかと思います。これは可能ですか?アプリ/アクティビティ/フラグメントのライフサイクルイベントに基づいてハウスキーピングを行う必要がありますか?ContentProvider
Loader
CursorAdapter
ContentProvider
クエリメソッド:
典型的なLoaderCallbacks
:
CursorAdapter
コンストラクタ:
私はこの質問を読みましたが、残念ながら、私が使用していることを示唆しているだけなので、私の問題に対する答えは得られていませんContentProvider
。
IllegalStateException:すでに閉じられているオブジェクトを再度開こうとします。SimpleCursorAdapterの問題
明らかになったばかりの重要な新しい情報
プロジェクトの他の場所で、sを使用しておらず、 sを適切Loader
に管理していない他のコードを発見しました。Cursor
上記と同じパターンを使用するようにこのコードを切り替えました。ただし、これで問題が解決した場合Cursor
は、プロジェクトの一部で管理されていない場合、他の場所で適切に管理されているプロジェクトを強制終了する可能性があります。
くっつき回る。
新しい情報の結果
それはそれを修正しませんでした。
新しい考え
つまり、おそらくそうです、私は(またはライフサイクルイベントに沿って)ハウスキーピングを行う必要があります。CursorAdapter
CursorLoader
新しいアイデアの成果
いいえ。
前のアイデア
ちょっとした調整を加えると、動作することがわかりました。ただし、非常に複雑なので、おそらく質問全体を書き直す必要があります。
android - 時期尚早にcursor.close()を呼び出す以外に、何がStaleDataExceptionを引き起こす可能性がありますか?
私は現在、Androidアプリを大幅に変更/書き直しています.次の行に沿って非常に時折クラッシュするのを見てきました:CursorAdapter
メソッドが呼び出され、それが呼び出されますAbstractWindowedCursor#checkPosition()
.
問題は、s を閉じていないことですCursor
。すべてCursor
の は から来て、CursorLoader
によって生成されますContentProvider
。からCursor
each それぞれにを渡し、for に通知を登録し、eachからに通知しています。要するに、使用中に a が閉じる理由が見つかりません。CursorAdapter
LoaderCallbacks
Cursor
ContentProvider
ContentResolver
insert(...)
delete(...)
update(...)
Cursor
だから:他の原因は何StaleDataException
ですか?
android - async ListFragment の正しいアプローチ
私はAndroidにかなり慣れていないため、次のことを達成するための正しい/最良の方法を見つけるのが難しいと感じています:
ActionBarSherlock を使用して、それぞれがフラグメントをロードする一連のタブを作成しています。これらの 1 つは ListFragment (実際には SherlockListFragment) です。新しいスレッドを使用してリストをロードすることから始めましたが、リストがロードされる前に別のタブに切り替えるまで、すべて問題ないように見えました。次に、フラグメントがアクティブではないと推測するため、 SetListShown(true) で失敗します。
私がやりたいのは、タブが初めて開かれたときにデータの読み込みを開始し、標準の進行状況インジケーターを表示してから、リストが表示され、進行状況インジケーターが削除されることです。データの読み込み中にタブが変更された場合、そのタブが再び開かれたときに表示されるはずです。
私が見逃していたこれを達成する簡単な方法があれば、素晴らしいです! Androidではそれは不可能です。私もそれを知りたいので、試すのをやめることができます;-)
AsyncTask、AsyncTaskLoader、IntentService などについて多くのことを読みましたが、何を使用する必要があるのか まったく明確ではなく、これらのいずれかが実際に私が望むものを達成するでしょう!
参考までに、私はAndroid用のモノとv2.3+をサポートする互換パックを使用していますが、Javaの例などを翻訳できることを願っています.
よろしくお願いします!ロビン