带有多个加载器的LoaderManager:如何获得正确的游标加载器

时间:2011-10-31 17:39:34

标签: android android-loadermanager android-loader

对我来说,如果您有多个装载机,如何获得正确的光标并不清楚。假设您定义了两个不同的Loader:

getLoaderManager().initLoader(0,null,this);
getLoaderManager().initLoader(1,null,this);

然后在 onCreateLoader()中根据ID执行不同的操作:

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

    if (id==0){
               CursorLoader loader = new CursorLoader(getActivity(),
            MaterialContentProvider.CONTENT_URI,null,null,null,null);
    }else{
               CursorLoader loader = new CursorLoader(getActivity(),
            CustomerContentProvider.CONTENT_URI,null,null,null,null);
            };
    return loader;
} 
到目前为止一切顺利。但是如何在 onLoadFinished()中获得正确的光标,因为你没有得到任何id来识别正确的Cursoradapter光标。

@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor cursor) {


    mycursoradapter1.swapCursor(cursor);
    if(isResumed()){
        setListShown(true);
    }else {
        setListShownNoAnimation(true);
    }



}
//and where to get the cursor for mycursoradapter2

或者我错了,这是在一个片段中获得两个不同cursoradapter的结果的错误方法。

3 个答案:

答案 0 :(得分:119)

Loader类有一个名为getId()的方法。我希望这会返回你与加载器关联的id。

答案 1 :(得分:32)

使用Loader的 getId()方法:

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
    switch (loader.getId()) {
        case 0:
            // do some stuff here
            break;
        case 1:
            // do some other stuff here
            break;
        case 2:
            // do some more stuff here
            break;
        default:
            break;
    }
}    

答案 2 :(得分:8)

如果您的加载器没有任何共同点,但结果的类类型(此处为Cursor),则最好创建两个单独的LoaderCallbacks实例(只需在Activity中创建两个内部类) / Fragment),每一个都专门用于一个装载机处理,而不是试图将苹果与橙子混合。

在您的情况下,似乎数据源和结果处理都不同,这需要您编写额外的样板代码以识别当前场景并将其分派到适当的代码块。