Получение аргументов Bundle в обратном вызове onLoadFinished CursorLoader

Когда я запускаю загрузчик курсора с

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

Я хочу получить пакет в

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

Но это возможно только из onCreateLoader (…)

Единственным обходным решением, о котором я могу думать, является подкласс CursorLoader и добавление некоторых полей для сохранения данных при загрузке на onLoadFinished (…)

Благодаря!

Я бы не просто использовал поле частного члена в классе, реализующем 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 // ... } 

Поскольку вы используете 'this' в качестве третьего параметра onLoadFinished, я предполагаю, что класс реализует интерфейс LoaderManager.LoaderCallbacks. Таким образом, нет необходимости в параметре, вы можете использовать поле частного члена.