versiones tipo sistemas sandwich operativos las jelly gingerbread cream caracteristicas bean android android-3.0-honeycomb android-loadermanager android-loader

tipo - sistemas operativos android



Cargadores en Android Honeycomb (3)

Alex; ¿Intentó validar si se llama siquiera al onLoadInBackground ()?

onLoadInBackground (): llamado en un subproceso de trabajo para realizar la carga real. Las implementaciones no deben entregar el resultado directamente, sino que deben devolverlo desde este método, que eventualmente terminará llamando a deliverResult (D) en el hilo de UI. Si las implementaciones necesitan procesar los resultados en el subproceso de UI, pueden anular deliverResult (D) y hacerlo allí.

Intento descubrir cómo usar los Loaders en Android 3.0 pero parece que no funciona. Los documentos solo describen el uso de CursorLoader pero estoy usando AsyncTaskLoader .

De los documentos parece que solo debería implementar AsyncTaskLoader.loadInBackground() pero nunca se llama después de getLoaderManager().initLoader() y luego crea el cargador en la devolución de llamada.

Veo mensajes de depuración que dicen Created new loader LoaderInfo{4040a828 #0 : ArticleDataLoader{4036b350}} por lo que parece que se creó con éxito.

¿Es posible que los cargadores actualmente estén descompuestos en el SDK o hay algún método al que deba llamar después de crear el cargador? (no lo han hecho en el ejemplo de CursorLoader ).

EDITAR: Parece que al llamar a forceLoad() en el Loader devuelto desde initLoader() comienza la carga al menos, pero esto significa que no puedes manejar las rotaciones correctamente :(


Debe anular el método onStartLoading (). Mira el ejemplo en el developer.android.com/reference/android/content/… .

/** * Handles a request to start the Loader. */ @Override protected void onStartLoading() { if (mApps != null) { // If we currently have a result available, deliver it // immediately. deliverResult(mApps); } // Start watching for changes in the app data. if (mPackageObserver == null) { mPackageObserver = new PackageIntentReceiver(this); } // Has something interesting in the configuration changed since we // last built the app list? boolean configChange = mLastConfig.applyNewConfig(getContext().getResources()); if (takeContentChanged() || mApps == null || configChange) { // If the data has changed since the last time it was loaded // or is not currently available, start a load. forceLoad(); } }


Dianne Hackborn respondió en el rastreador de errores y nos remitió a la implementación de la biblioteca estática. CursorLoader está haciendo forceLoad () y por eso está funcionando.

Vea mi clase adjunta para una clase que maneja esto para usted en la mayoría de casos simples en el rastreador de errores: code.google.com/p/android/issues/detail?id=14944