Loader no se inicia después de llamar a initLoader ()?
Tengo un fragmento, y quiero iniciar un cargador cuando se hace clic en un botón:
public class MyFragment extends Fragment { public void onActivityCreated() { super.onActivityCreated(); Button btn = ...; btn.setOnClickListener(new OnClickListener() { public void onClick(View view) { getLoaderManager().initLoader(500, null, mMyCallback); } }); } private LoaderManager.LoaderCallbacks<String> mMyCallback = new LoaderManager.LoaderCallbacks<String>() { @Override public Loader<String> onCreateLoader(int arg0, Bundle arg1) { Log.e(TAG, "LoaderCallback.onCreateLoader()."); return new MyLoader(getActivity()); } } } public class MyLoader extends AsyncTaskLoader<String> { public MyLoader(Context context) { super(context); } @Override public String loadInBackground() { Log.e(TAG, "Hi, running."); return "terrific."; } }
Después de hacer clic en el botón, puedo ver el método onCreateLoader de mi devolución de llamada llamado, pero el cargador creado nunca empieza realmente. ¿Necesitamos llamar a forceLoad () en el cargador para que empiece realmente? Ninguno de los puestos de muestra hacer esto,
- Proyecto Android que hace referencia al proyecto "normal" de java en eclipse desde la actualización de las herramientas sdk 17
- ¿Cómo extender la clase de URL para soportar otros protocolos en java (android)?
- Cambio de Android Color de sombra de elevación de material
- ¿cuál es el objeto T ?
- Java comprobar si la fecha es el primer domingo del mes
Gracias
- ¿No se puede resolver la importación de com.google?
- Cómo determinar si la tarea del temporizador ha finalizado
- Error: Los tipos de cadena no están permitidos (en 'layout_height' con el valor 'wrap content'). activity_main.xml
- Runtime.exec no funciona
- La clase de prueba de Android falla al compilar en eclipse con error de "falta de coincidencia vinculada"
- Cambiar los conmutadores a declaraciones "if-else"
- Impresión POS / ESC Apex3 image SOS
- Importar todas las importaciones en eclipse a la vez?
Es necesario implementar onStartLoading()
y llamar a forceLoad()
en algún lugar del método.
Consulte esta publicación para obtener más información: Implementación de cargadores (parte 3)
En mi experiencia nunca funcionó a menos que use forceLoad()
.
Puedes encontrar la respuesta a esta pregunta anterior útil: Cargadores en Android Honeycomb
Tres puntos importantes con respecto a los cargadores son:
-
Siempre Utilice el método
forceLoad()
al inicializar los cargadores. Por ejemplo:getLoaderManager().initLoader(500, null, mMyCallback).forceLoad();
-
Siempre implemente
onStartLoading()
. Esta función será automáticamente llamada porLoaderManager
cuando seLoaderManager
el fragmento / actividad asociada. -
Asegúrese de que el ID del cargador es único, de lo contrario no se llamará al nuevo cargador.
Si todavía hay un problema, puede comprobar el estado del cargador llamando al método isStarted()
.
onCreateLoader
mantener una referencia a la instancia del cargador que cree en el método onCreateLoader
. A continuación, para actualizarlo, llame a yourLoader.onContentChanged();
Si tiene más de un cargador en la misma actividad, asegúrese de que su id difiere. Perdí pocas horas para entenderlo 🙂