当我用
启动游标加载器时 Bundle bundle = new Bundle();
bundle.putInt("arg", 123);
getLoaderManager().restartLoader(0, bundle, this);
我想在
中获取 bundle public void onLoadFinished(Loader<Cursor> loader, Cursor data)
但这似乎只有 onCreateLoader(...) 才有可能
我能想到的唯一解决方法是继承 CursorLoader 并添加一些字段以在加载到 onLoadFinished(...) 时持久保存数据
谢谢!
最佳答案
我不会只在实现 LoaderCallbacks 的类中使用私有(private)成员字段,因为您永远不知道哪个加载器正在完成。最好按照提问者的建议去做,并用加载程序存储数据。这是我的做法:
public static class CursorWithData<D> extends CursorWrapper {
private final D mData;
public CursorWithData(Cursor cursor, D data) {
super(cursor);
mData = data;
}
public D getData() {
return mData;
}
}
@Override
public Loader<Cursor> onCreateLoader(int id, final Bundle bundle) {
// ...
return new CursorLoader(getActivity(), uri, projection, selection, args, order) {
@Override
public Cursor loadInBackground() {
return new CursorWithData<Bundle>(super.loadInBackground(), bundle);
}
};
}
@Override
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
CursorWithData<Bundle> cursorWithData = (CursorWithData<Bundle>) cursor;
Bundle args = cursorWithData.getData();
cursor = cursorWithData.getWrappedCursor(); // Optional if you are worried about performance
// ...
}
关于android - 在 onLoadFinished CursorLoader 回调中获取 Bundle args,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10376106/