具有多个加载程序的 LoaderManager: 如何获得正确的游标加载程序

对我来说,不清楚如何获得正确的光标,如果您有多个加载程序。假设您用以下方法定义了两个不同的 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;
}

so far so good. But how to get the right cursor in OnLoadFinish () because you don't get any id to identify the right Cursor for the right 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

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

27846 次浏览

Loader 类有一个名为 GetId ()的方法。

使用 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;
}
}

如果您的加载程序除了结果的类类型(这里是 Cursor)之外没有任何共同之处,那么您最好创建两个单独的 LoaderCallbacks实例(简单地作为 Activity/Fragment 中的两个内部类) ,每个实例都专用于一个加载程序处理,而不是试图将苹果与橙子混合。

在您的示例中,数据源和结果处理似乎是不同的,这需要您编写额外的样板代码来识别当前场景并将其分发到适当的代码块。