問題タブ [android-loadermanager]

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 に答える
2611 参照

android - Android: 最上位以外の Fragment で CursorLoader がクラッシュする

CursorLoader を使用してコンテンツを取得する ListFragments がいくつかあります。ユーザーがコンテンツをドリルダウンすると、ある Fragment が別の Fragment に置き換わります (Activity は同じままです)。ただし、最上位以外の Fragment でコンテンツが変更されると、アプリはクラッシュします。

これは、バックグラウンド更新によってコンテンツが変更された場合、またはユーザーがホーム画面から戻ったときに別の Fragment がバック スタックの一番上にある場合に発生する可能性があります。ハンドラーは、onLoadFinishedもはや存在しない UI を更新しようとします。しかし、フラグメントがまだカーソルの更新を取得しているのはなぜですか?

フラグメントが表示されない場合は更新を中止することで回避しましたが、これは間違っているようです。

これが私のフラグメントの外観です。簡潔にするために少し編集されています。

チェックはクラッシュを防ぎますisVisible()が、私が見たどのサンプル コードにもありません。ここで何が問題なのですか?


編集:案の定、閉じたカーソルを使用しようとしている古いビューで StaleDataException が発生しました。そのため、ビューが破棄されたときに LoaderManager を破棄しています。これが正しいことかどうかはまだわかりません。StaleDataException を再現できません。

isVisible()上記のハックを削除し、これを追加しました:

0 投票する
4 に答える
25589 参照

android - Android互換パッケージ - フラグメント...アクティビティに添付されていません


こんにちは、私はこの問題に直面しています: Android アプリケーション (最小 SDK 2.1) でフラグメントを使用するために互換性パッケージを使用しています。

フラグメントでランダムな例外が発生することがありますが、その理由がわかりません。これは私が受け取るスタック トレースです:

Fragment クラスで呼び出している対応するコードは次のとおりです。

フラグメントを呼び出すアクティビティのコードは次のとおりです。

getLoaderManager() のフラグメント ソース コードは次のとおりです。

クラッシュする前のアプリケーションの手順は次のとおりです。

  1. アクティビティはバックグラウンドでメソッドを呼び出します。
  2. アクティビティでコールバック メソッドが呼び出される
  3. このコールバック メソッドでは、アクティビティがフラグメントを呼び出します。
  4. フラグメントは、アクティビティが必要ないくつかのメソッド (getLoadManager() など) を起動しようとします。
  5. フラグメントはもうアクティビティに添付されていません => クラッシュ

2 つの修正を試みました。

  • アクティビティをテストして、アクティビティが終了しているかどうかを確認します (上記のコードのように)
  • メソッド isDetached を使用してフラグメントをテストします。

ご協力いただきありがとうございます!!!

よくわからない場合は、お気軽にお問い合わせください。

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

java - SQLiteDatabase のシングルトン デザイン パターンの使用

私はAndroidの初心者で、基本的な経験を積むために簡単なアプリケーションに取り組んでいます。私のアプリは非常にシンプルで、ブロードキャスト レシーバーといくつかのアクティビティで構成されています。どちらのコンポーネントも単一のデータベースを使用するため、理論的には、両方が同時にデータベースにアクセスしようとする可能性があります。

現在、必要なたびに db オブジェクト (SQLite db ヘルパー クラス) をインスタンス化し、必要な操作 (クエリ、挿入など) を実行しているだけです。

ここや他のドキュメントで読んだことから、これには、データベースが同時にアクセスされた場合に「db locked」例外が発生するという問題があるため、より良いアプローチは、この db オブジェクトの単一のインスタンスを持つことです。コンポーネントは常に同じデータベース接続を使用します。

上記の推論は正しいですか?それでは、シングルトンはこれに十分な解決策でしょうか? 一部の純粋主義者が反対するかもしれないことは承知していますが、これはかなり単純なアプリケーションであるため、他の場合ではできないことを行う余裕があることに注意してください。

そうでなければ、より良い選択肢は何でしょうか? コンテンツ プロバイダーの使用について読んだことがありますが、これには多すぎるでしょう。また、データを他のアクティビティと共有することに興味がありません。私は確かにこの投稿を読んで、かなり役に立ちました。

0 投票する
1 に答える
7368 参照

android - Cursor.requery() が「非推奨」とマークされているのはなぜですか?

Cursor.requery() は、ListView のコンテンツを更新するために使用する非常に一般的な方法です。しかし、なぜこのメソッドは「非推奨」とマークされているのでしょうか? API ドキュメントの理由がよくわかりません。

Cursor.requery() API: http://developer.android.com/reference/android/database/Cursor.html#requery ()

誰か理由を詳しく説明してくれませんか? ありがとう:)

0 投票する
4 に答える
51285 参照

android - AsyncTaskLoaderとAsyncTask

以来Honeycomb、使用するv4 Compatibility Libraryことが可能AsyncTaskLoaderです。私が理解していることから、AsyncTaskLoader画面の反転などの構成の変更を通じて生き残ることができます。

AsyncTaskLoader代わりに使用することをお勧めしますAsyncTaskか?LoaderManager写真にも写りますか?

しかし、を正しく使用する方法についての良い例は見つかりませんでしたAsyncTaskLoader。ドキュメントにも例はありません。誰かがいくつかの良い例を提供できますか?

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

android - カスタム AsyncTaskLoader コールバックに関する問題

AsyncTaskLoader でいくつかの問題が発生しています。ローダーを再起動しようとすると両方が発生するため、それらが関連しているかどうかはわかりません。私のアプリケーションには、カスタム CursorAdapter の 3 つのインスタンスがあり、1 つのシングルトン LoaderManager によって管理されるカスタム AsyncTaskLoader の 3 つのインスタンスに支えられています。問題は 2 つの異なるアダプター/ローダーのペアに関連していますが、使用されるコードはいずれの場合も同じです。

問題 1: restartLoader() を呼び出すと、LoaderManager は onCreateLoader への呼び出しを登録しますが、onLoaderReset() への呼び出しは登録しません。ローダーは deliveryResult() を取得しますが、onLoadFinished() は呼び出されません。ローダーには、'reset' または 'started' フラグが設定されていません (以下のコードを参照)。

問題 2: restartLoader() を呼び出すと、LoaderManager が onLoaderReset() への呼び出しを登録します。ローダーは onReset() に到達しますが、それ以上到達しません。Cursor は null に設定されていますが、新しい Cursor はロードされていません。

問題の可能性はありますか?ローダーとローダー マネージャーのコードの一部を次に示します。

CustomCursorLoader.java

CustomCursorLoaderManager.java:

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

android - LoaderManagerは何をしますか?

私は何をするのか理解しようとしていLoaderManagerます。誰かがそれと例を共有できますか?カーソルを作成するときにそれらを使用する必要がありますか?そうでない場合は、どのように使用すればよいですか?簡単な例をいただければ幸いです。

0 投票する
5 に答える
47026 参照

android - ContentProvider を使用しない CursorLoader の使用

Android SDK のドキュメントには、startManagingCursor()メソッドが非推奨であると記載されています。

このメソッドは非推奨です。代わりに、LoaderManager で新しい CursorLoader クラスを使用してください。これは、Android 互換性パッケージを通じて古いプラットフォームでも利用できます。このメソッドにより、アクティビティは、アクティビティのライフサイクルに基づいて、指定された Cursor のライフサイクルを管理できます。つまり、アクティビティが停止すると、指定された Cursor で自動的に activate() が呼び出され、後で再開されると requery() が呼び出されます。アクティビティが破棄されると、管理されているすべての Cursor が自動的に閉じられます。HONEYCOMB 以降をターゲットにしている場合は、代わりに getLoaderManager() を介して利用可能な LoaderManager を使用することを検討してください。

ということで使いたいと思いますCursorLoader。しかし、のコンストラクターで URI が必要な場合、どのようにカスタムCursorAdapterとなしで使用できますか?ContentProviderCursorLoader

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

android - CursorLoaders の利点は何ですか?

私は自分のアプリで広範囲に使用Cursorsして、データベースから情報を読み込んだり、データベースに情報を書き込んだりします。Honeycomb と Compatibility PackageLoaderには、「適切な」方法でデータをロードするのに役立つように設計された新しいクラスがあることがわかりました。

基本的に、これらの新しいクラス (特にCursorLoader) は、以前のデータ管理方法よりもかなり優れていますか? たとえば、CursorLoader過剰管理の利点は何ですか?Cursors

そしてContentProvider、データを処理するために a を使用しますが、これは明らかにかかりますが、これはどのようにメソッドUrisと噛み合うのでしょうか? ローダーを個別に使用するinitLoader()には、それぞれをセットアップする必要がありますか? Fragmentsまた、ID は各ローダーに対してどの程度一意である必要がありますか?それはアプリの範囲を超えているのでしょうか?それとも単なるフラグメントでしょうか? UriCursorLoader に a を渡してデータをクエリする簡単な方法はありますか?

現時点でわかるのは、ローダーがデータをアプリに取り込むために不要な余分なステップを追加することだけです。

0 投票する
5 に答える
8840 参照

android - SimpleCursorAdapterの古いコンストラクターは非推奨になりました..本当に?

ここでは、SimpleCursorAdapterのAPIレベル1コンストラクターは非推奨であり、およびの使用が推奨されていることを示していLoaderManagerますCursorLoader

LoaderManagerしかし、との使用法を掘り下げてみると、 (私が推測するフラグメント自体の拡張)を拡張する内部クラス内にを作成するこのCursorLoader例が見つかりました。引数としてaを取るという事実を除いて、すべてが大丈夫のようです。つまり、これは、データベースにアクセスするためにを作成する必要があることを意味します。ListFragmentCursorLoaderCursorLoaderUriContentProvider

ListViewデータベースからのアイテムを使って単純なものを作成するためだけに、これらすべてを実行しなければならないのはやり過ぎのように見えることを告白しなければなりません。特に、データベースデータを他のアプリで利用できるようにするつもりがなく、コンテンツプロバイダーの主な目的がそれを行うことである場合。

それで、それは本当に価値がありますか?

特に私のように、取得するコンテンツが少なくなる可能性が高い場合はそうです。私はそれを古いやり方で行うことを真剣に考えています、あなたは何と言いますか?