LoaderManager con múltiples cargadores: cómo obtener el cursor correcto
Para mí no está claro cómo obtener el cursor derecho si tiene varios cargadores. Digamos que defina dos cargadores diferentes con:
getLoaderManager().initLoader(0,null,this); getLoaderManager().initLoader(1,null,this);
Entonces en onCreateLoader () haces diferentes cosas dependiendo del id:
- IllegalStateException - Apoyo LoaderManager con AutocompleteTextView
- Android LoaderManager y CursorLoader Confusión
- ¿Cómo insertar correctamente valores en la base de datos SQLite utilizando el método insert () de ContentProvider mediante un CursorLoader?
- Loader entrega el resultado al fragmento incorrecto
- Cargadores en Android Honeycomb
@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 conseguir el cursor derecho en onLoadFinished () porque no obtienes 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 manera incorrecta de obtener resultados para dos cursoradapter diferentes en un fragmento.
- ¿Debo usar Fragments para obtener un LoaderManager?
- Android FragmentPagerAdapter con LoaderManager
- Loader no se inicia después de llamar a initLoader ()?
- GetSupportLoaderManager () utiliza ids iguales en fragmentos diferentes?
- GetLoaderManager (). InitLoader () no acepta 'this' como argumento aunque la clase (ListFragment) implementa LoaderManager.LoaderCallbacks <Cursor>
- SherlockFragmentActivity con múltiples ListFragments y batallas con cursor SQLite
- NullPointerException en el método restartLoader de LoaderManager
- Referencia de LoaderManager no encontrada con API Nivel 17
La clase Loader tiene un método llamado getId () . Espero que esto devuelva el identificador que ha asociado con el cargador.
Utilice 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; } }
Si sus cargadores no tienen nada en común sino el tipo de clase del resultado (aquí: Cursor
), es mejor crear dos instancias LoaderCallbacks
distintas (simplemente como dos clases internas en su Actividad / Fragmento), cada una dedicada a un solo tratamiento , En lugar de tratar de mezclar las manzanas con las naranjas.
En su caso, parece que tanto el origen de datos como el tratamiento de resultados son diferentes, lo que requiere que escriba el código extra para identificar el escenario actual y enviarlo al bloque de código apropiado.