2010-10-01 7 views
17

Così posso gonfiare un ViewStub in fase di esecuzione. Diciamo che voglio farlo scomparire e quindi magari gonfiare di nuovo a seconda di qualche evento che si verifica (ad esempio, una barra degli strumenti che si gonfia e si sgonfia a seconda di ciò che l'utente seleziona sullo schermo).Come "sgonfiare" un ViewStub?

Posso usare View.setVisibility (View.GONE) .... c'è un altro modo?

O sto facendo qualcosa di sbagliato qui?

Grazie! :)

+0

'setVisibility (View.GONE)' è leggermente più descrittivo. – st0le

+0

Grazie .... Modificato – Sid

+0

Cosa non ti piace di View.GONE? –

risposta

33

I layout di gonfiaggio possono essere costosi, specialmente su dispositivi meno recenti. Pensa a ViewStub come a un meccanismo di caricamento lento per sottostrutture di visualizzazione che può essere o non essere mai espanso piuttosto che un modo per scambiare sezioni di una gerarchia di viste in fase di runtime. Una volta gonfiati, non c'è niente di sbagliato nello scambio tra VISIBILE/GONE. GONE farà in modo che il framework salti quella sottostruttura durante costosi attraversamenti.

Questo è vero finché non è necessaria la memoria utilizzata dalla vista gonfiata. Impostare la visibilità su GONE non rilascia alcun tipo di memoria; contrassegna solo la vista come andata per scopi di layout e disegno. Per liberare la memoria della vista gonfiata del viewstub, dovresti in realtà rimuovere la vista gonfiata e sostituirla di nuovo con un nuovo viewstub per uso futuro.

+0

ciao @adamp Ho un dubbio. cosa succede se creo un semplice layout lineare e aggiungo dinamicamente una vista figlio e quando non ne ho bisogno rimuovo quella vista figlio dal layout lineare in questo modo rimuoverà completamente la vista figlio. È un buon approccio quando vuoi ottimizzare la memoria? perché una volta che lo stub della vista è gonfiato, non possiamo rimuovere quella vista solo facendola andare. – KDeogharkar

0

Sì, puoi rimuovere quando vuoi. L'ho fatto proprio ora.

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

e impostare la visibilità su qualsiasi evento.

v.setVisibility(View.GONE); 
+1

L'impostazione della visibilità su GONE non la rimuove, ma semplicemente la nasconde. – Pkmmte

Problemi correlati