2

次の場合にカーソルローダーをマージして、1つのカーソルローダーを取得するにはどうすればよいですか。単純なカーソル アダプタで使用するデータベース アダプタを作成するために、複数のコンテンツ プロバイダを呼び出しています。以下の私のコードを見てください。

@Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {

    productIdCursor.moveToFirst();
    CursorLoader cursorLoader;

    // CursorLoader cursorLoader;

    int i = 0;

    while (productIdCursor.isLast()) {

        String[] Projection = { "p.id as _id", "p.name", "p.subTitle",
                "p.textColour", "pi.thumb" };

        String userSelectionCritera = "p.id = pp.prod_id and pp.imag_id = pi.id and p.id= ? and p.id = pc. prod_id and pc.coun_id = ?";

        String[] selecttionArgs = new String[] {
                productIdCursor.getString(productIdCursor
                        .getColumnIndex("prod_id")),
                String.valueOf(countryId) };

        cursorLoader = new CursorLoader(getActivity(),
                DatabaseContentProvider.CONTENT_URI_PRODUCTCATEGORY,
                Projection, userSelectionCritera, selecttionArgs, null);

        productIdCursor.moveToNext();

    }




    return cursorLoader;
4

1 に答える 1

1

カーソルローダーを実際にマージすることはできませんが、いくつかの異なることを試すことができます。おそらく最善の選択肢は、SQL 選択ステートメントを から に変更するp.id = ?ことp.id in (...id list here...)です。この回答を見ると、IDリストの文字列を作成できます。

また、製品 ID の配列を受け取り、それらをバックグラウンドで個別にロードして MergeCursor オブジェクトにマージする独自のカスタム ローダーを作成することもできます。これにより、必要なすべてのデータを含む単一のローダーとカーソルが得られます。IMOこの2番目のアプローチは本当に面倒です。これが唯一の有効な解決策である場合は、データベース テーブル スキーマに戻って確認する必要があります。

于 2013-02-16T18:33:14.453 に答える