2012-01-18 10 views
10

¿Es posible usar FragmentTransaction y el método remove() para deshacerse de los fragmentos que están definidos en el layout.xml (usando la etiqueta de fragmento)?¿Puedo eliminar un fragmento definido en un archivo layout.xml?

No conseguí que esto funcionara utilizando las bibliotecas de soporte v4. El fragmento permanece en su lugar después de que hayas confirmado FragmentTransaction, después de llamar a remove(). ¿Alguien puede decirme si esto es por diseño, un error o una característica?

Es posible reemplazar un fragmento que se define en lyaout.xml, por lo que me resulta un poco extraño que no sea posible eliminarlo?

Respuesta

11

Las API nativas disponibles que comienzan en Honeycomb funcionan igual que las de la libarary de soporte, por lo que no puede eliminar una instancia de un Fragment que se haya declarado en su archivo XML de diseño.

Con FragmentTransactions manipulas ViewGroups como LinearLayouts que actúan como contenedores para mantener el diseño de otros Fragmentos. Sin embargo, cuando declara Fragment en su diseño, no tiene un contenedor en el mismo sentido porque es parte permanente de la jerarquía de Vista, por lo que no puede eliminarlo. Eso es por diseño, para admitir cosas como Fragmentos de navegación que nunca quitarías de todos modos. :)

Una cosa que es interesante, y lo descubrí totalmente por accidente, es que puedes agregar nuevos Fragmentos en un Fragmento que fue declarado con la etiqueta en tu diseño; y actúa como un contenedor para otros Fragmentos

+0

Buen punto. Veo ahora la clara distinción entre eliminar un fragmento declarado en un layout xml (mi problema) y manipular un grupo de vistas que contiene un fragmento (Replace). –

+0

"Sin embargo, cuando declaras un en tu diseño, no tiene un ..." has olvidado la palabra "Fragmento" – Gonzo

1

No funcionó con las bibliotecas de soporte v4. El fragmento permanece en su lugar después de confirmar FragmentTransaction, después de llamar a remove(). ¿Alguien puede decirme si esto es por diseño, un error o una característica?

Esto es por diseño (o la falta de una característica, definitivamente no es una función si me preguntas: P). Por lo tanto, mientras use las bibliotecas de soporte, no podrá lograr esto.

+0

Gracias por la respuesta. ¿Estás seguro de que puedes con una aplicación Honeycomb nativa? –

+1

Lo siento, no sé. –

1

Como dijo @ david-c-sainte-claire y @ martín-marconcini, no se puede usar el método remove() y FragmentTransaction para eliminar el fragmento que se definió en el XML . Eso no significa que no tengas suerte. Siempre puedes usar el método setVisibility().

findViewById(R.id.fragment_main).setVisibility(View.GONE); 
Cuestiones relacionadas