12

私のアプリはCursorLoaderメインテーブルからデータをロードするために使用しています。ListViewの助けを借りて、データが表示されますCursorAdapter。ListView に表示されるビューには、子テーブルのデータも必要です。テーブルの関係は 1 対多です。

  • クエリ中に両方のテーブルを結合すると、結合されたレコードは子レコードと同じ数になるため、ListViewでは、メイン テーブルの 1 つのレコードに対して複数のアイテムが表示されます。

  • テーブルに参加しないとCursorLoader、カーソル経由でデータが配信された後に子レコードを取得する最善の方法がわかりません。誰でも私を助けることができますか?

4

3 に答える 3

1

子テーブルのデータを個別にクエリする必要がない場合は、JSON 表記などを使用してそのデータをメイン テーブルに配置し、CursorAdapter の bindView メソッド内で解析することができます。子テーブルのデータの複雑さによっては、パフォーマンスの問題が発生する可能性があります。ただし、これにより、単一のカーソルを使用できます。

実行できる別のアプローチは、生のクエリを結合として実行する DAO オブジェクトを作成し (複数の行を取得するため)、カーソルを List に処理することです。ここで、Foo はデータを表す POJO です。(またはn + 1クエリを実行します-メインクエリ、次に各行のサブクエリ)。次に、DAO を呼び出してリストを返すローダーを作成し、そこから ListAdapter を使用します。カスタム ローダーは引き続きデータ変更通知に登録し、リロードを行うことができます。CursorLoader をパターンとして使用して、ListView の Cursor をいじりたくないときにリロードする独自のローダーを作成しましたが、うまく機能します。

于 2012-07-11T03:53:53.043 に答える
0

結合オプションを試し、クエリの並べ替え順序を設定して、結果がメイン テーブルの結果で並べ替えられるようにする必要があります。

その後、ExpandableListViewを使用してメイン アイテムとその下にあるすべての子アイテムを表示し、「1 対多」の関係を適切に示すことができます。もちろん、このケースを処理するには、アダプターを適切に作成する必要があります。

于 2012-07-15T01:22:42.077 に答える
0

子テーブルから集計データを取得する場合は、SQL ステートメントで「group by」を使用する必要があります。たとえば、2 つのテーブル:

parent(id,name)
child(id,parentId,age)

最年長の子を持つすべての親を問い合せるには:

select a.id,a.name,max(b.age)
from parent as a inner join child as b on a.id=b.parentId
group by a.id,a.name
于 2012-07-18T06:26:46.720 に答える