2013-02-16 20 views
2

如何在以下情況下合併遊標加載器以獲得一個Cursor加載器。我打電話給內容提供商不止一個人創建我的數據庫適配器以使用簡單的遊標適配器。請看下面我的代碼。如何合併CursorLoader

@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; 
+0

只需執行一個返回合併結果的不同查詢。你不能將兩個CursorLoaders「合併」在一起......這個概念沒有什麼意義。 – 2013-02-16 18:40:11

+0

謝謝,你說得對。只是希望以與MergeCursor類 – user1154390 2013-02-17 11:58:57

回答

1

你不能合併遊標載入器,但你可以嘗試一些不同的東西。您最好的選擇可能是將您的SQL選擇語句從p.id = ?更改爲p.id in (...id list here...)。您可以通過查看at this answer來爲ID列表創建一個字符串。

您也可以創建自己的自定義加載程序,該加載程序接受產品ID的數組並將它們全部加載到後臺,並將它們合併到MergeCursor對象中。這將爲您提供一個加載器和一個包含所有需要的數據的光標。海事組織這第二種方法真的很混亂。如果這是唯一的工作解決方案,那麼你可能應該回去查看你的數據庫表格模式。

+0

相同的方式實現。感謝您的回答。我知道第一個選擇。 MergeCursor類在我的腦海中點擊了上面的問題。有了這個類,我們可以合併兩個遊標。我很好奇使用加載器光標的可能解決方案。 – user1154390 2013-02-17 11:56:58