【发布时间】:2011-12-18 22:27:20
【问题描述】:
对我来说,如果您有多个加载器,则不清楚如何获得正确的光标。假设您定义了两个不同的加载器:
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
或者我错了,这是在一个片段中获取两个不同光标适配器的结果的错误方法。
【问题讨论】:
-
这是一个非常好的问题!它问得很好,并且触及了一个相当微妙的主题。非常具体。
-
应该提到的是,当所有加载器的加载器返回类型不同时,您必须使用单独的处理程序类,因为由于泛型类型擦除,Java 不会允许您实现具有多个类型的接口(在这种情况下为
LoaderCallbacks)。它仅适用于您的情况,因为两次结果都是Cursor。 -
@Matthias 太好了,你提到了它!我只是在考虑如何拥有 2 个具有不同返回类型的加载器。那么如果 2 个具有 2 种不同返回类型的 loader 怎么办?使用 1 个加载器执行一项任务,而使用线程执行另一项任务?
-
@Robert 不需要使用线程。您可以使用两个
Loaders。请通过这个stackoverflow.com/a/20839825/2818583
标签: android android-loadermanager android-loader