2013-02-16 56 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