对我来说,如果你有多个加载器,我不清楚如何获得正确的光标。假设您使用以下命令定义了两个不同的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来标识正确的光标。
@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
或者我错了,这是在一个片段中获得两个不同游标适配器的结果的错误方法。
发布于 2011-11-01 01:45:19
Loader类有一个名为getId()的方法。我希望这将返回您与加载器关联的id。
发布于 2014-01-24 03:39:10
使用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;
}
}
发布于 2014-04-20 08:54:55
如果您的加载器除了结果的类类型之外没有任何共同之处(这里是:Cursor
),那么您最好创建两个单独的LoaderCallbacks
实例(只是作为您的活动/片段中的两个内部类),每个实例专门用于一个加载器处理,而不是试图把苹果和橙子混在一起。
在您的例子中,数据源和结果处理似乎是不同的,这需要您编写额外的样板代码来识别当前场景并将其分派到适当的代码块。
https://stackoverflow.com/questions/7957418
复制相似问题