2012-04-29 10 views
9

Cuando comienzo un cargador cursor conObtención de los argumentos bulto en la devolución de llamada onLoadFinished CursorLoader

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

Quiero conseguir el paquete en

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

Pero esto sólo parece posible de onCreateLoader (.. .)

La única solución que se me ocurre es subclasificar CursorLoader y agregar algunos campos para persistir los datos al cargar en onLoadFinished (...)

Gracias!

Respuesta

0

Dado que está utilizando 'this' como tercer parámetro de onLoadFinished, supongo que la clase está implementando la interfaz LoaderManager.LoaderCallbacks. Entonces no hay necesidad del parámetro, puede usar un campo de miembro privado.

1

No utilizaría simplemente un campo de miembro privado en la clase que implementa LoaderCallbacks porque nunca se sabe exactamente qué cargador está terminando. Es mejor hacer lo que sugirió el asker y almacenar los datos con el cargador. Así es como lo hago:

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 

    // ... 
} 
Cuestiones relacionadas