Android Loader no activa las devoluciones de llamada en la pantalla
Estoy usando un AsyncTaskLoader
. Tengo una actividad que ha implementado LoaderCallbacks
(biblioteca de soporte).
Tengo punto de ruptura depurado y puesto en registros, el cargador entrega el resultado, sin embargo la segunda vez que la devolución de llamada onLoadFinished
no se activa. Lo raro – cuando vuelvo a girar de nuevo funciona, que nunca la orientación que empiezo a obtiene callbacks cuando vuelva a ella.
- Confundido sobre CursorLoaders y usarlos con un SQLiteOpenHelper personalizado
- AsyncTaskLoader no llama a onLoadFinished a menos que devuelva un nuevo objeto en loadInBackground
- Diferencia entre `initLoader` y` restartLoader` en `LoaderManager`
- Global Loader (LoaderManager) para su reutilización en múltiples Actividades / Fragmentos
- ExpandableListFragment con LoaderManager para el paquete de compatibilidad
En mi actividad onResume
:
LoaderManager lm = getSupportLoaderManager(); Loader loader = lm.initLoader(0, null, new LoaderManager.LoaderCallbacks<String>() { @Override public Loader<String> onCreateLoader(int i, Bundle bundle) { Loader<String> loader = new TestLoader(MainActivity.this); return loader; } @Override public void onLoadFinished(Loader<String> stringLoader, String s) { Log.d(Application.TAG, "OnLoadFinished " + s); doStuff(s); } @Override public void onLoaderReset(Loader<String> stringLoader) { // NOP } });
En mi cargador:
public class TestLoader extends AsyncTaskLoader<String> { private String mData; public TestLoader(Context context) { super(context); } // This get's called after a loader is initialized or a loader // that is alive still is reset @Override public void onStartLoading() { if (mData != null) { // Have our data loaded, just deliver it! deliverResult(mData); } if (takeContentChanged() || mData == null) { forceLoad(); } } // This is called when an Activity or Fragment requests a loader // to be reset because they want new data @Override public void onReset() { mData = null; // Ensure that the old task is cancelled if it was running // We do NOT have to call forceLoad here because onStartLoading // will get called after this cancelLoad(); } // Here we just want to store our own data we got and reset our boolean @Override public void deliverResult(String data) { Log.d(Application.TAG, "deliverResult " + data); mData = data; super.deliverResult(mData); } @Override public String loadInBackground() { // returns content from a content provider ... } }
Realmente desconcertado por este, soy nuevo en Android, así que tal vez esto es obvio para alguien más 🙂
- Poblar listview de ListAdapter o SimpleCursorAdapter
- GetLoaderManager en ListActivity
- Android Fragment - Utilizar el gestor de carga de la actividad en lugar de Fragmento. ¿Está bien?
- Referencia de LoaderManager no encontrada con API Nivel 17
- Android getContentResolver (). NotifyChange () no reinicia mi cargador
- AlphabetIndexer con adaptador personalizado administrado por LoaderManager
- Cómo utilizar dos cursores y CursorJoiner en LoaderManager en android
- Android FragmentPagerAdapter con LoaderManager
Debe llamar simplemente getSupportLoaderManager()
/ getLoaderManager()
en onCreate()
si es una Activity
o onActivityCreated()
si es un Fragment
. El initLoader()
real initLoader()
puede estar en otro lugar. De lo contrario el cargador estará en un estado detenido y no entregará los resultados a pesar de que completa la carga. Sospecho que es porque el encargado del cargador no vuelve a conectar los cargadores viejos a la nueva Activity
menos que la llamada anterior se haga en onCreate()
la nueva Activity
onCreate()
.
Tienes
Loader loader = lm.initLoader(...)
Deberías
Loader loader = new LoaderManager.LoaderCallbacks(...) {...}
Y en su onResume()
this.getLoaderManager().restartLoader(0, null, this.loader);
Consulte la documentación del cargador .
- Enumerar actividad con encabezado, pie de página y vacía todo visible
- Android ViewPager que genera una excepción IndexOutOfBounds al configurar el elemento / página actual