我多次拨打restartLoader()
并在我的onCreateLoader()
中将最后Loader<Cursor>
保存到全局变量,以便仅处理onLoadFinished()
中的最后一个。但是,对于onCreateLoader()
的n次调用,始终只有一个onLoadFinished()调用。
为什么?如果有另一个加载程序出现,经理是否会抛弃实际处理过的加载程序?
实际处理哪一个?第一个,最后一个或最快/最慢的一个?
我需要这个的原因是因为onLoadFinished()
我检查了
if (loader == mMySavedLoaderFromLoaderCreated) {
// do stuff, update adapter etc
} else if (loader == mAnotherLoader) { // I have multiple loaders
// do stuff
}
有时在更改方向后,它不会通过我的支票。
修改
首先restartLoader()
创建一个ID正确的新加载器(100)
然后我旋转屏幕,id为100的装载机就可以了
在此之后,我致电restartLoader()
- &gt; onCreateLoader()
知道id 100,但会创建一个 id = 0 的加载程序。
onLoadFinished(Loader<Cursor> loader,...)
来自参数的加载器是id为100的旧加载器,而不是新创建的加载器。
EDIT2:
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
if (id == LOADER_PRODUCT) {
/* creating query */
mProductLoader = new CursorLoader(
getActivity(),
ContentProvider.getUri(Product.class, null),
null,
query.toString(),
queryArgs,
null
);
return mProductLoader;
} else if (id == LOADER_STATUS) {
mStatusLoader = new CursorLoader(
getActivity(),
ContentProvider.getUri(Status.class, null),
null,
null,
null,
null
);
return mStatusLoader;
}
return null;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
if (loader == mProductLoader) {
mProductCursor = data;
mAdapter.swapCursor(mProductCursor);
mAdapter.setSearchQuery(mSearchQuery);
} else if (loader == mStatusLoader) {
}
}