問題タブ [android-cursorloader]
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 - 最初の読み込み時に Android CursorAdapter が更新されない
編集 XMLを追加しませんでした
選択項目にタグを付けるためのダイアログを作成しています。最初のビューは、データベースにあるタグを適用しています。次の画面は、データベースに新しいタグを追加するためのダイアログです。タグに使用する提案を提供しています。タグの入力を開始したときにリストをフィルター処理したいと考えています。画面ごとに 2 つのカスタム CursorAdapter を使用していますが、それらは同じ ListView を共有しています。また、CursorLoader を使用してクエリをバックグラウンドで実行しています。どちらもサポート ライブラリから拡張されています。
新規タグ画面を初めて開くと、ダイアログが表示された後、Android 4.0.3 でフィルタされたカーソルでリストが更新されず、クイック スクロールも機能しません。タグビューに切り替えてから新しいタグダイアログに戻ると、本来のようにフィルタリングしてスクロールします.私のクエリは機能し、コードは毎回 Android 2.3.3 で機能します。これが機能しない理由がわかりません。CursorLoader と Suggestion アダプターのコードは次のとおりです。
助けてくれてありがとう。
XML
android - CursorLoaders について混乱し、カスタム SQLiteOpenHelper でそれらを使用する
私は、人々が行う必要があるさまざまなタスクのアラームを設定できるようにするアプリを作成しています。私の現在の計画は、すべての関連データを SQLite データベースに保存することです。そのために、SQLiteOpenHelper を拡張するクラスを作成し、取り込まなければならないと予想されるすべての CRUD を処理するメソッドをそのクラスに詰め込みました。すべての処理を 1 つのスレッドで行うのは一般的に悪い考えであることを知っていたので、私はスレッド間で作業を分離する方法を調べたところ、CursorLoader と LoaderManager が見つかりました。これらは Android 互換性ライブラリで利用できるため、理想的でした。ただし、LoaderManagerは、ドキュメントのチュートリアルで行く ContentProvider が必要なようですであり、他のアプリがデータにアクセスできるようにするつもりはなかったので、ContentProviders で何かをする必要があるとは思っていませんでした。ContentProvider がないと、データベースが CursorLoader にフィードするための Uri を取得する方法がわかりません。SQLiteOpenHelper を拡張するクラスを引き続き使用し、LoaderManager を実装して、UI スレッドからカーソルを離してすべての ListFragments を保持できるようにする方法はありますか?
android - 同じLoaderManagerを使用するCursorLoadersとAsyncTaskLoaders
複数のCursorLoaderを使用するフラグメントがあります。すべて正常に動作します。次に、同じフラグメントにAsyncTaskLoaderも追加する必要があります。
質問は、同じLoaderManager.LoaderCallbacksインターフェイスを使用してCursorLoadersとAsyncTaskLoaderの両方を管理するにはどうすればよいですか?
私の考えでは、CursorLoaderは-AsyncTaskLoaderであるため、LoaderCallBacksを両方に適応させることができるはずですが、ボートに乗り遅れる可能性があります...
android - CursorLoader を再起動してもデータベースの削除が反映されない
データベース内のデータを追跡するために CursorLoader を使用しています。このデータベースは次のコマンドで削除できます
削除後、ローダーを再起動します
コールバックを取得すると
データがなくなったことを反映していません。以前と同じデータを取得します。
私は概念的に間違ったことをしていますか?
android - リストビューのカスタム カーソルアダプターを Android 3.0 以降に変換するにはどうすればよいですか?
かなり初心者で、ここに私の最初の投稿です。カスタム baseadapter を使用してリストビューを設定する 2.3.3 で正常に動作するアプリがあります。問題は、Android 3/4 で廃止された startManagingCursor と requery を使用していることです。
私はsqliteと、すべてのクエリを保持するデータベースアダプターと、アクティビティからパラメーターを渡すためのプライベートメソッドを使用しています。アイテムを長押しするか、アイテムをクリックして新しいアクティビティで開き、リストが正常に更新されると、リストを更新できます。
メイン UI でこれらのタイプの操作を実行するべきではないことは理解していますが、cursorloader を理解するのに苦労しています。それは必要ですか? 別のスレッドで実行するには、asynctask のような別のものを使用する必要があります。これがどのように組み合わされるのか理解できません。正しい方向への助けをいただければ幸いです。ありがとう。
これは、最も関連性の高いコードが MyActivity からのものであると私が思うものの小さなサンプルです
および CursorAdapter
================編集==================
私は startManagingCursor() と requery() を削除し、互換性パッケージから import android.support.v4.widget.CursorAdapter を追加しました。さまざまな場所から複数の呼び出しがあったため、プライベート Cursor mCursor を作成し、this.mCursorAdapter.changeCursor(mCursor) を使用して更新しました。
現在、これは次の点を除いてほとんど機能します。
- メインUIで実行されるため、これを行うべきではありません
- カーソルを閉じる方法は、アプリの設定方法によって異なります
私の場合、カーソルを閉じることができません。そうしないと、リストビューが空になります。onDestroy() で閉じると、実行が保証されません。また、onBackPressed() で閉じると、新しいカーソルで新しいアクティビティを開くリスト項目をクリックできるため、機能しません。また、誰かがリスト項目をクリックしてから戻るボタンをクリックすると、リストは同じ場所にあるはずなので、onStop() を閉じる (そして onStart() で開く) ことも答えではありません。また、すべてのアクティビティでパブリック静的カーソルも試しましたが、これにも問題がありました。私が試みなかったもう 1 つのことは、カーソル情報を一度にメモリにロードしてすぐに閉じることでしたが、これは理想的とは言えません。
CursorLoader のアイデアはとても気に入っていますが、URI のみを受け入れ、コンテンツ プロバイダーが必要で、rawQuery() を受け入れない点が異なります。私のデータベースには何千ものアイテムがあり、データベース アダプターには 100 種類の異なるクエリ呼び出しがあり、それらすべてを変更するのは非常に面倒です。CursorLoader が最善の方法だと思いますが、Android の実装方法にはがっかりしています。
また、AsyncTaskLoader を使用する誰かが書いた ContentProvider を使用しない CursorLoader の使用法も見たので、ContentProvider は必要ありません。これは今のところ私の最善の策かもしれませんが、データの変更を更新するメカニズムがないことを誰かが指摘しました。私はそれを調べて見る必要があります。
android - 2 つのカーソルローダーがデータを返すのを待ってから、戻りデータに依存する 3 つ目のカーソルローダーを開始するにはどうすればよいですか?
フラグメントとコンテンツ プロバイダーを使用してローカルの sqlite データベースにアクセスする Android アプリがあります。リストビューは、表示がクエリ結果に基づくように、複数のデータベース クエリに依存することがよくあります。3 つのカーソルローダーがあると仮定すると、ローダー 3 を実行する前にローダー 1 と 2 の両方が完了していることを確認するにはどうすればよいですか?
android - LoaderManagerとCursorLoaderを使用してリストビューにアルバムとアーティストを表示する
を使用してListFragment
、デバイスのアルバムと関連するアーティストを表示するリストがありますMediaStore
。したがって、各行には2つありTextViews
ます。行のをデータにバインドするために、カスタムCursorAdapterを使用LoaderManager
してリストを埋めています。CursorLoader
TextViews
ListFragmentコード:
AlbumsAdapter(カスタムCursorAdapter)コード:
今のところ、このListFragmentを表示すると、java.lang.NullPointerExceptionが発生します。これがlogCatです。
アルバムと関連するアーティストをリストビューに表示するために、コードを修正するのを手伝ってもらえますか?
問題が解決しました :
カスタムリストビューをAlbum、Artistなどで埋めようとしている人は、LoaderManager/CursorLoaderというテクニックを使用する必要があります。
1)行のTextViewをカーソルのデータにバインドする独自のカスタムCursorAdapterを作成します(上記のカスタムCursorAdapterを参照)
2)次に、フラグメントで次のことを行います。
以上です !!!カスタムリストビューを埋めるためにLoaderManager、CursorLoader、およびカスタムアダプタを使用する方法について、このような非常に単純な例を誰も調達したことがない理由はわかりません。とにかく、これが私のような初心者の将来に役立つことを願っています。
android - MediaStore.Audio.Albums.ALBUM_ARTからアルバムアートを表示します
カスタムCursorAdapterを使用してLoaderManagerでCursorLoaderを使用します。アルバムと関連アーティストの表示はすでに完了しているので、カバーを表示したいと思います。
これが私のカスタムCursorAdapterです:
私は成功せずに以下を試しました:
MediaStore.Audio.Albums.ALBUM_ARTは何を返し、それを使用してImageViewのカバーを覆い隠す方法を教えてください。ありがとう。
android - IntentServiceとCursorLoaderの同期の問題
私はデータを取得するIOSchedCursorLoader
の方法に従うアプリを構築していますが、次の代わりに使用すると思っていたという事実がありますContentObserver
。
私はまた、使用するRetoのandroid-protips-locationを参照してCursorLoader
おり、ロジックフローはIOSchedと非常に似ているため、次のようになります。
initLoader → startService (serviceIntent) → handleIntent → insert into DB → notifyChange → onLoadFinished → update UI
私が期待しているのは、データベースで実行された後のCursorLoader
戻り値です。Cursor
insert
現在、フラグメントはこれに対してクエリをonActivityCreated
呼び出して実行し、現在のデータとともにその時点のを返します。ただし、更新を実行してもトリガーされていないようです。ログは、が実行されたことを示していますが、ログを表示すると、挿入時にディスパッチされたことが示されます。initLoader
ContentProvider
Cursor
onLoadFinished
delete
insert
ContentProvider
notifyChange
android - CursorLoader を使用してアルバムの曲をクエリする
MediaStore
をクエリしてアルバムの曲のリストを取得したいCursorLoader
これどうやってするの ?このコードでデバイスのすべての曲を取得できます:
特定の Album の曲をフィルタリングするには、コードまたは変更に何を追加すればよいですか?