2010-10-01 10 views
17

Así puedo inflar un ViewStub en tiempo de ejecución. Digamos que quiero hacer que desaparezca y luego tal vez inflar de nuevo dependiendo de algún evento que ocurra (por ejemplo, una barra de herramientas que se infla y desinfla de acuerdo con lo que el usuario selecciona en la pantalla).¿Cómo "desinflar" una ViewStub?

Puedo usar View.setVisibility (View.GONE) ... ¿hay alguna otra manera?

¿O estoy haciendo algo mal aquí?

Gracias! :)

+0

'setVisibility (View.GONE)' es un poco más descriptivo. – st0le

+0

Gracias .... Lo editó – Sid

+0

¿Qué no te gusta de View.GONE? –

Respuesta

33

El inflado de diseños puede ser costoso, especialmente en dispositivos más antiguos. Piense en ViewStub como un mecanismo de carga diferida para ver subárboles que pueden expandirse o no, en lugar de una forma de intercambiar secciones de una jerarquía de vistas en tiempo de ejecución. Una vez inflado, no hay nada de malo en el intercambio entre VISIBLE/GONE. GONE hará que el framework omita ese subárbol durante cruces costosos.

Esto es cierto siempre que no necesite la memoria utilizada por la vista inflada. Establecer la visibilidad de GONE no libera ningún tipo de memoria; solo marca la vista como desaparecida para propósitos de diseño y dibujo. Para liberar la memoria de la vista inflada de la barra de pestañas, en realidad tendría que quitar la vista inflada y reemplazarla de nuevo con una barra de visualización nueva para usarla en el futuro.

+0

hola @adamp Tengo una duda. ¿Qué sucede si creo un diseño lineal simple y agrego una vista secundaria dinámicamente en él y cuando no lo necesito, elimino esa vista secundaria del diseño lineal de esta manera eliminará completamente la vista hija? ¿Es un buen enfoque cuando quieres optimizar la memoria? porque una vez que se haya inflado el talón de vista, no podemos eliminar esa vista simplemente con GONE. – KDeogharkar

0

Sí, puede eliminar cuando lo desee. Lo he hecho ahora.

ViewStub stub = findById(...); 
View v = stub.inflate(); 

y configurar la visibilidad de la vista en cualquier caso.

v.setVisibility(View.GONE); 
+1

Establecer la visibilidad de GONE no lo elimina, simplemente lo oculta. – Pkmmte

Cuestiones relacionadas