Para mí, no está claro cómo obtener el cursor correcto si tiene varios cargadores. Digamos que define dos cargadores diferentes con:
getLoaderManager().initLoader(0,null,this);
getLoaderManager().initLoader(1,null,this);
luego en onCreateLoader () haces diferentes cosas dependiendo de la identificación:
@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 obtiene ninguna identificación 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 me equivoco y esta es la forma incorrecta de obtener resultados para dos cursorapteros diferentes en un fragmento.
android
android-loadermanager
android-loader
Kay Gladen
fuente
fuente
LoaderCallbacks
en este caso) con más de una tipo. Simplemente funciona en su caso, ya que en ambas ocasiones, el resultado es unCursor
.Loader
s. Consulte este stackoverflow.com/a/20839825/2818583Respuestas:
La clase Loader tiene un método llamado getId () . Espero que esto devuelva la identificación que ha asociado con el cargador.
fuente
getId()
?Utilice el método getId () de Loader:
fuente
Si sus cargadores no tienen nada en común más que el tipo de clase del resultado (aquí :)
Cursor
, es mejor que cree dosLoaderCallbacks
instancias separadas (simplemente como dos clases internas en su Actividad / Fragmento), cada una dedicada a un tratamiento de cargador, en lugar de que intentar 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.
fuente
Activity
implementarLoaderCallbacks
y pasarthis
agetLoaderManager().initLoader()
es asegurar queLoaderManager
actúa como canal de comunicación entreActivity
yLoader
víaLoaderCallbacks
. ¿Cómo se está creando aquí ese canal de comunicación siActivity
no se está implementandoLoaderCallbacks
sino creando clases internas anónimas?LoaderCallbacks
. Nada requiere usar elActivity
mismo comoLoaderCallbacks
. Es más sencillo crear múltiples canales de comunicación cuando los necesita.