2

私は 3 つのデータベースStacksテーブルをDates持ってZいます。(私の専門用語を許してください。必要に応じてスキーマを提示できます。)StacksDatesZStacks

これ以降、説明の複雑さを軽減するためにStacksとのみを参照しますが、関連する場合は とまったく同じように使用されます。DatesZDates

典型的なでは、参照ページで説明されている実装を使用してListFragmentを構築します。つまり、空のアダプターを作成し、クエリが終了したときにアウトをスワップします (クエリ インとスワップ イン)。ListViewLoaderManager CursoronCreateLoader()onLoadFinished()

アダプター内の各リスト項目にバインドする値がほとんどここにあるため、テーブルに対してクエリを実行します (ライブラリを使用して実装さStacksれた DB が前面にあるため、URI を使用します)。これは正常に機能します。Content ProviderSimple Content Provider getView()

Datesただし、これを行う方法はわかりませんが、テーブルからいくつかの値をバインドしたいとも考えています。ローダーを使用する前にSQLiteOpenHelper、アダプターで new を作成し、getView() メソッドでセカンダリ アイテムに直接アクセスします。つまり、テーブルCursorから s を返します。Datesこれは遅かったし、後から考えると悪い考えだったと確信している :P

複数のデータ ソースを使用して (理想的にはローダーを使用して) リスト ビューを埋める、これを実装する標準的な方法はありますか?

編集:

  • テーブルには、Dates関連付けられた各Stack.
  • URI に応じて、3 つのテーブルすべてへのアクセスを提供する ContentProvider が 1 つあります。
  • 複数のローダーも喜んで使用しますListView
4

1 に答える 1

1

行ごとにこれを行う必要がある場合は、基本的に2つの選択肢があります。

  1. ContentProviderたとえば、サブクエリやより複雑なクエリを使用して、すべてを前もって実行します。
  2. のクエリ非同期を実行しgetView()ますAdapter。これは、リモートイメージの読み込みがどのように機能するかに似ています。

どちらの方法にも長所があります。#1はおそらくもっと単純ですが、リストにたくさんのアイテムがある場合は十分に速くないかもしれません。#2は、関連する日付のみをクエリするため高速ですが、スクロール時にクエリをキャンセル(または作成を回避)するのは面倒な場合があります。

不明な数のロードを実行する必要がある場合、ローダーは意味がありません。

于 2012-12-30T21:48:49.660 に答える