具有多个加载器的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; } 

到现在为止还挺好。 但是如何在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结果的错误方法。

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

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

如果你的加载器没有什么共同之处,但是结果的类types(这里是Cursor ),那么最好创build两个单独的LoaderCallbacks实例(简单地说就是Activity / Fragment中的两个内部类),每个实例都专门用于一个加载器处理,而不是试图混合苹果与橘子。

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