PDA

Ver la Versión Completa : Recargar Fragment


Dild0
06/01/14, 15:43:31
Buenas tengo una aplicación con un único activity el cual dependiendo de X valores me carga un fragment u otro en pantalla mostrandome así un layout inflado que yo quiero.

En concreto este fragment hago consultas a base de datos que me muestra en pantalla y en la actionabar un boton añadir.

Como podría recargar este fragment despues de pulsar ese boton añadir para que me aparezca el nuevo dato insertado???

Si recargo el activity pierdo mi fragment ya que para llegar a ese frament hay q pulsar varias opciones, por eso quiero repintar de nuevo todo el fragment q se ejecute de nuevo el oncreate y eso para que realice las llamadas a bbdd y pinte el nuevo dato.

sl2

neoadn
06/01/14, 16:03:16
Si el método de recarga de fragment es una variable .. Puedes guardar la variable con sharedpreferences. Y en onresume puedes añadir que recargue el ftagment última vez visto. Luego con finish() limpias el dato de ultima vez visto... Y debería de funcionar.

Es que como no se como es el código no puedo concretar más.

Espero que te valga para algo

kriogeN
06/01/14, 17:26:41
Puedes crear el mismo Fragment y colocarlo en el lugar del antiguo.

Aún así, si no he entendido mal, lo que quieres hacer es actualizar el contenido del Fragment, no el Fragment en sí. ¿No es más fácil crear un método que actualice las Views del Fragment (llamadas a la BD incluidas) y llamarlo desde la Activity? Además de más fácil, es mucho más limpio.

Dild0
06/01/14, 23:10:14
Puedes crear el mismo Fragment y colocarlo en el lugar del antiguo.

Aún así, si no he entendido mal, lo que quieres hacer es actualizar el contenido del Fragment, no el Fragment en sí. ¿No es más fácil crear un método que actualice las Views del Fragment (llamadas a la BD incluidas) y llamarlo desde la Activity? Además de más fácil, es mucho más limpio.

En principio he salido del paso creando de nuevo el Fragment y colocandolo en el lugar del antiguo.

Lo otro no me queda muy claro.

Tengo mi clase Main
donde cargo el Fragment


private void seleccionItem(int position) {

Fragment fragment = null;
Bundle args = new Bundle();

switch (position) {
case -1:
fragment = new Home();
break;

case 1:
fragment = new participantes();
break;

default:

fragment = new correos();
args.putInt("SELECCION", position);
break;
}

if (fragment != null) {
fragment.setArguments(args);
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.co ntent_frame, fragment).commit();

} else

Log.e("Error", "Error al crear fragment");

}


Y en la clase participantes el cual hereda de Fragment tengo el codigo donde llamo a bbdd y lleno los view.
Aqui manejo la actionbar el cual tengo un boton para agregar.
Los view los cargo en el oncreateview

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.acb_part, menu);

MenuItem item = menu.findItem(R.id.action_add_part);

item.setOnMenuItemClickListener(new OnMenuItemClickListener() {

@Override
public boolean onMenuItemClick(MenuItem item) {


double valorAleatorio = Math.random()*(100-50)+2;
consultas.InsertParticipantes(Double.toString(valo rAleatorio));


Fragment fragment = null;
fragment = new participantes();
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.co ntent_frame, fragment).commit();


return true;
}
});

super.onCreateOptionsMenu(menu, inflater);
}

No se me ocurre como llenar los view del fragment desde fuera...

kriogeN
07/01/14, 01:49:54
La mejor forma es tener un método público en el Fragment que actualice las Views del Fragment, y a este método lo llamas cuando quieras actualizar el contenido del Fragment. Si en participantes tienes un método que hace invisible (por poner un ejemplo) un botón, y ese método es público, podrás llamarlo perfectamente desde la Activity.

Pero claro, viendo tu código creo que lo mejor es volver a crear el Fragment, porque parece por lo poco que se ve que estando en cualquier otro Fragment puedo añadir participantes, y en ese caso mostrar el Fragment de los participantes.

oxot
07/01/14, 14:15:49
Si usas un Loader para cargar los datos de la BD, "en teoría" (porque en stackoverflow lees cantidad de problemas) el Loader puede mantener vigilancia sobre los datos y cuando estos se modifiquen, recargar la lista (o el sistema que uses para mostrar datos) y ya sólo te quedaría recargar el adaptador de datos para mostraslos nuevamente.

http://developer.android.com/guide/components/loaders.html (http://developer.android.com/guide/components/loaders.html#callback)
"They monitor the source of their data and deliver new results when the content changes" ... que dice literalmente Google.

Salu2

Dild0
07/01/14, 14:33:27
La mejor forma es tener un método público en el Fragment que actualice las Views del Fragment, y a este método lo llamas cuando quieras actualizar el contenido del Fragment. Si en participantes tienes un método que hace invisible (por poner un ejemplo) un botón, y ese método es público, podrás llamarlo perfectamente desde la Activity.

Pero claro, viendo tu código creo que lo mejor es volver a crear el Fragment, porque parece por lo poco que se ve que estando en cualquier otro Fragment puedo añadir participantes, y en ese caso mostrar el Fragment de los participantes.

en realidad no... modifico mi actionbar a conveniencia con setHasOptionsMenu(true); y ya inflo el actionbar con el boton añadir porque estoy en este fragment para otros no existe ese boton,

Voy a rearmar todo con el metodo publico jeje esque de java soy algo novato y aveces hago la cosa mas dificil y la más tonta no se me pasa por la cabeza,

Gracias a todos