public void onLoadFinished(Loader<Cursor> loader, Cursor data)
にバンドルを取得したい。しかし、これは唯一のonCreateLoader(から可能と思われます。.. 。)
私が考えることができる唯一の回避策は、CursorLoaderをサブクラス化し、onLoadFinished(...)にロードしてデータを保持するいくつかのフィールドを追加することです。
ありがとうございます!
public void onLoadFinished(Loader<Cursor> loader, Cursor data)
にバンドルを取得したい。しかし、これは唯一のonCreateLoader(から可能と思われます。.. 。)
私が考えることができる唯一の回避策は、CursorLoaderをサブクラス化し、onLoadFinished(...)にロードしてデータを保持するいくつかのフィールドを追加することです。
ありがとうございます!
onLoadFinishedの3番目のパラメータとして 'this'を使用しているので、クラスがLoaderManager.LoaderCallbacksインターフェイスを実装していると仮定します。したがって、パラメータは必要ありません。プライベートメンバーフィールドを使用できます。
LoaderCallbacksを実装しているクラスでプライベートメンバーフィールドを使用するのは、どのローダが終了しているのかわからないからです。 Askerがローダーでデータを提案して保存するときに行うのがよい。ここで私はそれを行う方法です:
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
// ...
}