Múltiples cargadores en la misma actividad

Tengo dos cargadores personalizados heredados de AsyncTaskLoader que me gustaría usar en mi actividad. Cada uno de ellos devuelve el resultado de otro tipo. Para utilizar mi actividad para una devolución de llamada debo implementar dos interfaces:

 implements LoaderCallbacks<GetSyncListDataResult>, LoaderCallbacks<ErrorResult> 

Sin embargo, tratando de implementar los métodos necesarios en la misma clase termino con error de método duplicado y error de borrado (???):

 // Methods for the first loader public Loader<GetSyncListDataResult> onCreateLoader(int ID, Bundle bundle) ... public void onLoaderReset(Loader<GetSyncListDataResult> loader) ... public void onLoadFinished(Loader<GetSyncListDataResult> loader, GetSyncListDataResult result) ... // Methods for the second loader public Loader<ErrorResult> onCreateLoader(int ID, Bundle bundle) ... public void onLoaderReset(Loader<ErrorResult> loader) ... public void onLoadFinished(Loader<ErrorResult> loader, ErrorResult result) ... 

Obviamente, los métodos están chocando y necesito una manera fácil de cómo resolver esto. ¿Cuál sería la manera correcta de resolver esto?

La respuesta correcta es según el comentario de @ dymmeh, es decir, no para la Activity para implementar dos interfaces LoaderCallbacks , sino para que la actividad contenga dos implementaciones de LoaderCallbacks . A modo de ejemplo: inicialice sus campos LoaderCallbacks en su actividad …

 private LoaderCallbacks<GetSyncListDataResult> dataResultLoaderListener = new LoaderCallbacks<GetSyncListDataResult>() { ...methods here... }; private LoaderCallbacks<ErrorResult> errorResultLoaderListener = new LoaderCallbacks<ErrorResult>() { ...methods here... }; 

… y declare sus identificadores de cargador …

 private static final int DATA_RESULT_LOADER_ID = 1; private static final int ERROR_RESULT_LOADER_ID = 2; 

… y luego inicializar sus cargadores …

 getLoaderManager().initLoader(DATA_RESULT_LOADER_ID, dataResultBundle, dataResultLoaderListener); getLoaderManager().initLoader(ERROR_RESULT_LOADER_ID, errorResultBundle, errorResultLoaderListener); 

… ¡Hecho!

Esto no es necesario. Implementar LoaderManager.LoaderCallbacks. Luego, cada vez que inicialice un cargador, déle un ID único. En las devoluciones de llamada, puede detectar el ID del cargador que provocó la devolución de llamada y tomar la acción apropiada.

es decir

 class MyLoader extends Activity implements LoaderManager.LoaderCallbacks<GetSyncDataResult> { ... private static final int LOADER1 = 1; private static final int LOADER2 = 2; ... getLoaderManager().initLoader(LOADER1, null, this); ... getLoaderManager().initLoader(LOADER2, null, this); ... public Loader<GetSyncDataResult> onCreateLoader(int loaderId, Bundle args) { switch (loaderId) { case LOADER1: ... case LOADER2: ... } ... 

Etcétera.

  • Error: androidmanifest.xml file missing -> ¿Qué estoy perdiendo?
  • ¿Cómo ejecutar la solicitud web en su propio hilo?
  • ¿Existe ya una clase StopWatch para android y por qué no funciona mi implementación?
  • Comunicación UDP de Android
  • las mejores prácticas para acceder a datos en una base de datos mientras
  • RadioGroup extendiendo RelativeLayout?
  • Android KeyPairGenerator genera siempre el mismo par de claves
  • Esta versión de la biblioteca de renderizado es más reciente que su versión de Android Studio. Actualiza Android Studio
  • Cómo cargar una clase de una matriz de bytes en android?
  • Fragmentos en ViewPager son nulos después onresume
  • Problema al extraer el número de puerto con URL.getPort () cuando la URL contiene "]"
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.