問題タブ [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.
android - データベースグローバルインスタンス
したがって、すべてのアプリケーションアクティビティに対して1つのデータベースインスタンスが必要です。私は次のコードを見つけました:
SQLiteDatabaseインスタンスをいつ閉じることができるかわかりません。
android - LoaderManager のスコープは何ですか?
LoaderManager でローダーを識別するときは、一意の ID を使用します。これらのIDがどれだけ一意でなければならないかについて尋ねています。
すべてのアクティビティとフラグメントには独自の LoaderManager がありますか? フラグメントは、接続されているアクティビティの LoaderManager を使用しますか? アプリケーションが所有する LoaderManager は 1 つだけですか?
使用している LoaderManager を変更する方法を教えていただければ、ボーナス ポイントです。アクティビティ内のすべてのフラグメントに同じ LoaderManager を使用させたい場合 (そのうちのいくつかは同じデータをプルし、ローダーを共有するとよいでしょう)、それは可能ですか?
android - Android の SQLite データベース カーソルに関するいくつかの質問
アプリケーションにデータベース アクセスを実装するために、Lars Vogel のチュートリアルに従いましたが、いくつかの点で非常に混乱しています...
呼び出しが行われるたびに
fetchTodo
、新しいカーソルが作成されて返されます。ガベージ コレクターの前のカーソルを残します。それで、私が使用しない場合startManagingCursor
、またはそのことについては、カーソルでCursorLoader
a を呼び出す必要がありますか?.close()
もちろん範囲外fetchTodo
、例:カーソル cursor = mNotesAdapter.fetchTodo(); // 何かをする... cursor.close();
私はこのカーソルを使い果たし、次のフェッチで新しいカーソルが作成されます。このように閉じる必要がありますか、それともガベージ コレクターに残す必要がありますか? 私はまったく異なる2つのことについて話していると思いますが... ポイントは、上記の例のように閉じる必要がありますか?
Cursor
メソッドも.deactivate()
あり、ドキュメントには、(アクティブカーソルよりも)使用するリソースが少ないと書かれています。いつこれを使用する必要がありますか?たとえば、私のアプリでは、ListActivity
を介して入力される がありSimpleCursorAdapter
ます (このコードの初期化は 1 回だけ呼び出されます)。使用されているカーソルはクラス メンバー変数です。これは、リストにデータを入力するメソッドの外でカーソルが必要だからです。データベースから何かが削除されたときにデータベースを再クエリするために必要です。しかし、レコードが削除されるまで、これはユーザー アクションであり、発生するまでに時間がかかる場合があります。その間、カーソルを無効にする必要がありますか? もう一度呼び出すと、.requery()
再びアクティブになるからです。または、SimpleCursorAdapter
カーソルがアクティブでないために動作を停止しますか?
編集:deactivate()
これをテストしたところ、カーソルアダプターをセットアップした後に呼び出すことができないことがわかりました。カーソルがアクティブでない場合、リストは空になるため、ListActivity が表示されている限り、カーソルをアクティブにしておく必要があります。結局、それをStartManagingCursor
処理するだけです。または新しいCursorLoader
。
startManagingCursor
/が非推奨であることはわかっていstopManagingCursor
ますが、(少なくとも当面は) Honeycomb をターゲットにしておらずCursorLoader
、今のところ新しいものを扱いたくありません。しかし、上記のチュートリアルでstartManagingCursor
は、どこでも使用されていますが、stopManagingCursor
一度も呼び出されていません。なぜだめですか?Androidは独自の方法でそれを処理しますか? 私が電話すべき状況はありますstopManagingCursor
か?
android - LoaderManager を取得するには Fragments を使用する必要がありますか?
一部のドキュメントによると、アクティビティまたはフラグメントのいずれかでローダーを使用できますが、互換パッケージは FragmentActivity のみが getLoaderManager() メソッドを持っていることを示しています。
古いマネージド カーソルは廃止されたため、カーソル ローダーを使用する必要があります。では、なぜこのデータ管理機能を UI ウィジェットの選択に結びつける必要があるのでしょうか? 私には意味がありません。
ありがとうP。
android - ListActivityのgetLoaderManager
ListActivityにローダーを実装したいのですが、アクティビティがgetLoaderManagerを認識しません。
android - Android 2.2でカーソルアダプターとコンテンツプロバイダーを使用する適切な方法は何ですか?
私は混乱していて、あなたの助けが必要です。Google IO 2010 で行われた Virgil Dobjanschi の講義「Android REST クライアント アプリケーションの開発」での指示に従おうとしましたが、残念ながら、コンテンツ プロバイダーとカーソル アダプターの間の有効な通信を実装する方法が見つかりません。
私がここで抱えている問題はカーソル アダプターに関連しているため、コンテンツ プロバイダーですべて問題ないと仮定しましょう。たとえば、自分の代わりに Contacts ContentProvider を使用してみましょう。私は最も簡単な解決策を試しました-任意のContentProvider(想定どおり、SDKによって提供される連絡先)とSimpleCursorAdapterです。問題は、連絡先からのカーソルを含む SimpleCursorAdapter のコンストラクターが非推奨であることです。ドキュメンテーションは言う:
このコンストラクターは非推奨です。
このオプションは、アプリケーションの UI スレッドでカーソル クエリが実行されるため、応答が遅くなったり、アプリケーションが応答しないというエラーが発生したりする可能性があるため、お勧めできません。別の方法として、LoaderManager を CursorLoader とともに使用します。
私の考えは次のとおりです。そこで、LoaderManager のドキュメント サイトにアクセスして、使用例と見つけたものを見つけました。SimpleCursorAdapter コンストラクターを使用した完璧な例です。はい、廃止されたので避けたかったのと同じです。
私が見つけることができるすべてのチュートリアルは、この非推奨のコンストラクターを使用しています。これを避けるための適切な方法は何ですか?それとも私が気にしすぎなのかな?私が欲しかったのは、良い習慣を学ぶことだけでした...
java - 11 より前のバージョンの Loader em API を使用する
と を使用していCursorAdapter
てContentProvider
、 を使用したいCursorLoader
ので、プロジェクトを再構成して API 11 をターゲットにし、min-sdk-ver を 7 に設定しました。ただし、がを使用Activity
するサブを呼び出すとクラッシュします。エラーは経由で配信されます。 Activity
CursorLoader
NoClassDefFoundError
IllegalStateException
私の質問は、同じ構成を持っていても、以前の Android バージョンで Honeycomb API を使用できますか?
android - ListActivity で LoaderManager を取得する方法
API レベル < 11 で CursorLoader を実装するために互換性パッケージを使用しています。ドキュメントとこの回答、およびこのすばらしいチュートリアルに従って、サポート パッケージをインポートし、LoaderManager.LoaderCallbacksを実装しましたが、次に呼び出す必要があります。
そのためには、FragmentActivity を拡張してから Activity Context から呼び出す必要がありますが、ListActivity は既に拡張しており、次のように LoaderManager を取得するために静的呼び出しを行いたいと考えています。
どうやら、これはLoaderManager < 11 を取得する方法であり、ドキュメントには次のように書かれています。
フラグメントとローダーを管理するには、メソッド FragmentActivity.getSupportFragmentManager() および FragmentActivity.getSupportLoaderManager() (getFragmentManager() および getLoaderManager() メソッドの代わりに) を使用する必要があります。
しかし、このコンパイル時エラーが発生しています:
FragmentActivity のコード、getSupportLoaderManager() はここでは静的ではありません。これによりエラーが説明されますが、ドキュメントに静的呼び出しが表示されるのはなぜですか...私は今混乱しています...
助けてください!
android - CursorAdapter および FLAG_REGISTER_CONTENT_OBSERVER
私のListViewアクティビティでは、LoaderManagerを使用してカーソルを管理し、カスタムCursorAdapterも持っています
アダプタの登録中に、LoaderManager によって管理される null カーソルが渡されます
この CustomCursorAdapter に SectionIndexer を実装する必要があります。私の問題は、CustomCursorAdapter コンストラクターでは、カーソルが最初は null になることです。Cursor の準備ができていることをどのように知ることができますか。
があります
メソッドは CursorAdapter でカーソルを取得するために使用できますが、そのコールバック メソッドでは、LoaderManager が Cursor へのデータのロードを完了し、操作する準備ができていることが確実にわかっています。
ありがとう
android - データ変更後にCursorLoaderが更新されない
LoaderManager
とクラスの機能を理解しようとして、小さなアプリケーションを作成しましたCursorLoader
。
-classに実装LoaderCallbacks<Cursor>
しましたが、または-methodsを介してデータを更新すると呼び出されず、その結果データが更新されないというFragmentActivity
事実を除いて、すべてが正常に機能します。ContentResolver.update()
ContentResolver.insert()
onLoadFinished()
カスタムContentProviderがありますが、データが変更されたことなどを通知しないContentProviderに問題があるのではないかと思います。