loadercallbacks android android-loadermanager android-loader

android - loadercallbacks



LoaderManager con cargadores múltiples: cómo obtener el cursorloader correcto (3)

Para mí no está claro cómo obtener el cursor derecho si tienes varios cargadores. Digamos que defines dos Loader diferentes con:

getLoaderManager().initLoader(0,null,this); getLoaderManager().initLoader(1,null,this);

luego en onCreateLoader () haces diferentes cosas dependiendo de la id:

@Override public Loader<Cursor> onCreateLoader(int id, Bundle arg1) { if (id==0){ CursorLoader loader = new CursorLoader(getActivity(), MaterialContentProvider.CONTENT_URI,null,null,null,null); }else{ CursorLoader loader = new CursorLoader(getActivity(), CustomerContentProvider.CONTENT_URI,null,null,null,null); }; return loader; }

Hasta aquí todo bien. Pero cómo obtener el cursor correcto en onLoadFinished () porque no se obtiene ningún ID para identificar el Cursor correcto para el Cursoradapter correcto.

@Override public void onLoadFinished(Loader<Cursor> arg0, Cursor cursor) { mycursoradapter1.swapCursor(cursor); if(isResumed()){ setListShown(true); }else { setListShownNoAnimation(true); } } //and where to get the cursor for mycursoradapter2

o estoy equivocado y esta es la forma incorrecta de obtener resultados para dos cursoradapter diferentes en un fragmento.


La clase Loader tiene un método llamado getId() . Espero que esto te devuelva el ID que has asociado con el cargador.


Si tus cargadores no tienen nada en común sino el tipo de clase del resultado (aquí: Cursor ), es mejor que crees dos instancias de LoaderCallbacks separadas (simplemente como dos clases internas en tu Actividad / Fragmento), cada una dedicada a un tratamiento de cargador , en lugar de tratar de mezclar manzanas con naranjas.

En su caso, parece que tanto la fuente de datos como el tratamiento del resultado son diferentes, lo que requiere que escriba el código repetitivo adicional para identificar el escenario actual y enviarlo al bloque de código apropiado.


Use el método getId () de Loader:

@Override public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { switch (loader.getId()) { case 0: // do some stuff here break; case 1: // do some other stuff here break; case 2: // do some more stuff here break; default: break; } }