java - w600 - juegos del sony ericsson w300
¿El cargador no se inicia después de llamar a initLoader()? (5)
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, pero el cargador creado nunca se inicia. ¿Necesitamos llamar a forceLoad () en el cargador para que realmente comience? Ninguna de las publicaciones de muestra hace esto,
Gracias
En mi experiencia, nunca funcionó a menos que usara forceLoad()
.
Puede encontrar útil la respuesta a esta pregunta anterior: Cargadores en Android Honeycomb
Si tiene más de 1 cargador en la misma actividad, asegúrese de que su ID sea diferente. Perdí unas horas para averiguarlo :)
Tres puntos importantes con respecto a los cargadores son:
Utilice siempre el método
forceLoad()
al inicializar los cargadores. Por ejemplo:getLoaderManager().initLoader(500, null, mMyCallback).forceLoad();
Siempre implementar
onStartLoading()
.LoaderManager
llamará automáticamente a esta función cuando seLoaderManager
el fragmento / actividad asociada.Asegúrese de que la ID del cargador sea única, de lo contrario no se llamará al nuevo Cargador.
Si todavía hay un problema, puede verificar el estado del cargador llamando al método isStarted()
.
onCreateLoader
mantener una referencia a la instancia del cargador que crea en el método onCreateLoader
. Luego, para actualizarlo, llame a yourLoader.onContentChanged();
onStartLoading()
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)