10

カーソルローダーを起動すると

 Bundle bundle = new Bundle();
 bundle.putInt("arg", 123);
 getLoaderManager().restartLoader(0, bundle, this);

バンドルを取得したい

 public void onLoadFinished(Loader<Cursor> loader, Cursor data)

しかし、これは onCreateLoader(...) からのみ可能と思われます

私が考えることができる唯一の回避策は、CursLoader をサブクラス化し、いくつかのフィールドを追加して、onLoadFinished(...) へのロード全体でデータを保持することです。

ありがとう!

4

2 に答える 2

2

LoaderCallbacks を実装するクラスでプライベート メンバー フィールドを使用するだけではありません。質問者が提案したように実行し、ローダーでデータを保存することをお勧めします。これが私がそれを行う方法です:

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

  // ...
}
于 2014-06-30T18:55:53.350 に答える