PDA

Ver la Versión Completa : [ CONSULTA ] Uso de Fragments


Bongiovi
13/07/14, 19:47:05
Quiero utilizar Fragments para, al hacer click sobre cierto elemento de un ListView, mostrar detalles de ese Item del ListView. Para hacer esto hago lo siguiente:

Creo una FragmentActivity donde alojo el ListView en un FrameLayout. El método onItemClick del ListView es el siguiente:

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3)
{
FT = getSupportFragmentManager().beginTransaction();
FT.replace(R.id.fragment_container, fragment);
FT.addToBackStack(null);
FT.commit();

}

Donde fragment_container es el FrameLayout comentado anteriormente y fragment contiene un Fragment que utilizo para probar. El problema es que el fragment se coloca encima de la ListView (se superpone). Pensaba que el xml que contiene el layout de la FragmentActivity se sustituye por el del fragment. Como consigo esto?

Un saludo!

mocelet
13/07/14, 20:06:44
Puedes sustituir un fragment por otro, ¿el ListView está en un fragment?

Cuando añades un fragment lo que hace es añadirlo al contenedor en cuestión, pero si ahí había cosas que no sea un fragment que el fragment manager haya puesto o tuvieras definido en el XML, entonces no lo quita.

Bongiovi
14/07/14, 14:04:28
Puedes sustituir un fragment por otro, ¿el ListView está en un fragment?

Cuando añades un fragment lo que hace es añadirlo al contenedor en cuestión, pero si ahí había cosas que no sea un fragment que el fragment manager haya puesto o tuvieras definido en el XML, entonces no lo quita.

Pasaba lo que tu has comentado, pero no consigo implementar el comportamiento que yo busco.

Ahora mismo tengo una FragmentActivity cuyo Layout es un FrameLayout, desde esta FragmentActivity ejecuto lo siguiente:

fragment = new EjBinariosDoneFragment();
FT = getSupportFragmentManager().beginTransaction();
FT.replace(R.id.fragment_container, fragment);
FT.addToBackStack(null);
FT.commit();El Fragment contiene el ListView con un onItemClickListener que abre un segundo Fragment con detalles mediante el mismo código que he mostrado antes. El problema es que al pulsar Back sucesivamente se cierran los dos Fragments y se muestra la FragmentActivity (que está en blanco). También me gustaría que el Fragment con detalles no ocupara la pantalla completa.

Un saludo!

kriogeN
14/07/14, 14:48:42
Para que al pulsar Back no vuelva atrás el Fragment sino la Activity basta con quitar la línea:

FT.addToBackStack(null);

Y si el comportamiento que buscas es el mismo que tiene por ejemplo GMail en Tablets, donde 1/4 de la pantalla es el ListView de correos y los otros 3/4 es el detalle del correo, lo que tienes que hacer es usar 2 FragmentLayout, en uno pones el Fragment con el ListView y en el otro vas haciendo "replace" de nuevos Fragments con el detalle, o también puedes poner un Fragment fijo con el detalle e ir cambiando su contenido con un método.

Bongiovi
14/07/14, 15:45:59
Para que al pulsar Back no vuelva atrás el Fragment sino la Activity basta con quitar la línea:

FT.addToBackStack(null);

Y si el comportamiento que buscas es el mismo que tiene por ejemplo GMail en Tablets, donde 1/4 de la pantalla es el ListView de correos y los otros 3/4 es el detalle del correo, lo que tienes que hacer es usar 2 FragmentLayout, en uno pones el Fragment con el ListView y en el otro vas haciendo "replace" de nuevos Fragments con el detalle, o también puedes poner un Fragment fijo con el detalle e ir cambiando su contenido con un método.

Perfecto, muchas gracias.

En cuanto al comportamiento, yo pensaba más en una ventana algo más pequeña que la pantalla pero centrada en esta, viéndose el fragment con el ListView de fondo. También pensé en que el segundo fragment fuese algo "transparente", pero no lo tengo muy claro. Me gustaría probar, pero no sé como hacerlo ni encuentro información al respecto.