2010-10-01 26 views
17

Je peux donc gonfler un ViewStub à l'exécution. Disons que je veux le faire disparaître et peut-être gonfler à nouveau en fonction de l'occurrence d'un événement (par exemple, une barre d'outils qui se gonfle et se dégonfle en fonction de ce que l'utilisateur sélectionne à l'écran).Comment "dégonfler" un ViewStub?

Je peux utiliser View.setVisibility (View.GONE) .... existe-t-il un autre moyen?

Ou est-ce que je fais quelque chose de mal ici?

Merci! :)

+0

'setVisibility (View.GONE)' est un peu plus descriptif. – st0le

+0

Merci .... Edité le – Sid

+0

Qu'est-ce que vous n'aimez pas à propos de View.GONE? –

Répondre

33

Les mises en page de gonflage peuvent être coûteuses, en particulier sur les appareils plus anciens. Pensez à ViewStub comme étant plus un mécanisme de chargement paresseux pour les sous-arborescences de vue qui peuvent ou ne peuvent pas être développées plutôt qu'un moyen d'échanger des sections d'une hiérarchie de vue lors de l'exécution. Une fois gonflé, il n'y a rien de mal à échanger entre VISIBLE/GONE. GONE fera en sorte que le framework ignore ce sous-arbre pendant les traversées coûteuses.

Ceci est vrai tant que vous n'avez pas besoin de la mémoire utilisée par la vue agrandie. La définition de la visibilité sur GONE ne libère aucune mémoire; il marque uniquement la vue comme ayant été utilisée à des fins de mise en page et de dessin. Pour libérer la mémoire de la vue agrandie du viewstub, vous devriez supprimer la vue gonflée et la remplacer par une nouvelle vue pour une utilisation future.

+0

bonjour @adamp J'ai un doute. Et si je crée une mise en page linéaire simple et y ajoute dynamiquement une vue enfant et que je n'en ai pas besoin, je supprime cette vue enfant de la mise en page linéaire de manière à ce que la vue enfant disparaisse complètement. Est-ce une bonne approche lorsque vous voulez une optimisation de la mémoire? car une fois que la vue est gonflée, nous ne pouvons pas supprimer cette vue simplement en la faisant disparaître. – KDeogharkar

0

Oui, vous pouvez supprimer quand vous voulez. Je l'ai fait tout à l'heure.

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

et de définir la visibilité de la vue sur n'importe quel événement.

v.setVisibility(View.GONE); 
+1

Le réglage de la visibilité sur GONE ne le supprime pas, il le masque simplement. – Pkmmte