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 (???):
- Prueba de elección múltiple y de elección única
- Detección de colisiones con polígonos
- ArrayList <CustomClass> en SharedPreferences
- ¿El método IOAcknowledge no funciona para SocketIO en Android?
- Aprendiendo C / C ++ y Java
// 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?
- ¿Puede una clase extender dos clases?
- ¿Utilizar BottomBar evita que se abran fragmentos?
- ListView filtrar correctamente pero muestra un resultado incorrecto
- Permitir sólo la entrada de datos únicos con Android SQLite?
- Práctica recomendada: Ampliación o anulación de una clase de proyecto de biblioteca de Android
- Error de vista web de Android "Señal fatal 5 (SIGTRAP)"
- Android Testing: ¿Puedo enviar sms al número de emulador del método de prueba?
- Biblioteca de procesamiento de imágenes para Android y Java
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 de ProGuard no puede encontrar superclase o interfaz org.apache.http.entity
- Cómo enviar BroadCast desde una aplicación a otra aplicación