2009-10-13 6 views
4

Parce que Java utilise des références d'objet et non des objets eux-mêmes, qu'est-ce qui m'empêche d'utiliser setTag() pour marquer une vue avec un objet entier au lieu de la propriété d'un objet? Est-ce juste le temps de recherche de l'attribut lorsque vous essayez de résoudre l'un des attributs après l'appel de getTag() ou y a-t-il une autre chose spécifique dont je devrais me préoccuper?Android: Quel soin dois-je prendre en utilisant la propriété setTag() de View?

En ce qui concerne mon problème spécifique, j'utilise une liste personnalisée qui a une vue d'image et une vue de texte. Initialement, je lier la listview à un adaptateur personnalisé pour récupérer des données xml et ensuite utiliser certaines balises dans le fichier XML de chaque élément pour remplir ma liste. Donc l'objet entier auquel je faisais allusion était la version analysée de tout le code XML d'un article ...

Répondre

4

L'une des utilisations les plus populaires de la méthode setTag(Object) est de conserver une référence à une instance de classe - si vous ont utilisé personnalisé ListView et personnalisé Adapter, vous devez connaître le modèle ViewHolder.

Sans trop savoir sur votre problème particulier, je dirais - Est-ce dangereux parfois? Oui, si utilisé de manière irresponsable. Cela signifie-t-il que vous devriez l'éviter à tout prix? Non, absolument pas.

Édition: Pourquoi voulez-vous que les données analysées pour vos affichages leur soient liées?

Avez-vous vraiment besoin, ou vous pouvez remplir un certain type de modèle? Si vous voulez accéder au tag d'une vue dans un contexte, où votre vue n'a pas la même signification/position (comme le fait le convertView dans notre exemple ViewHolder préféré :)), je pense que l'utilisation de tags est OK. Sinon, je suis sûr que si vous y réfléchissez un peu plus, vous trouverez une autre approche mieux adaptée à votre problème.

+0

Oui. J'ai entendu parler du pattern ViewHolder. Merci ... C'est un soulagement ... A propos de mon problème, je viens de mettre à jour ma question ci-dessus ... – Legend

+0

C'est juste que la description de l'article ne cesse de changer en fonction de l'élément qui est en cours de visualisation. Donc, si je dois transmettre des informations à une intention, j'ai besoin d'informations supplémentaires sur cet élément particulier. Bien sûr, je pense que j'ai exagéré en disant que je passerais l'article entier mais juste un ou deux attributs est bon pour moi. Mais, je voulais juste savoir du point de vue de la performance ... Merci pour la réponse ... – Legend

1

Il y a deux API pour définir une valeur juste et une autre avec clé et valeur. La première API est très sûre, mais vous devez être très prudent lorsque vous utilisez une deuxième API.

En interne dans View.java Android maintient une vue de mappage hashmap statique vers un tableau fragmenté. La clé et la valeur transmises dans le settag sont stockées sur le tableau fragmenté. Il y a deux choses importantes à prendre en compte.

Ne sauvegardez pas d'abord l'objet de valeur ayant une référence à l'activité. Cela entraînerait une fuite de mémoire car l'activité aura une forte référence à partir de la valeur et la valeur a une référence forte à partir de la hashmap statique gérée par View.class.

Chaque fois que vous recherchez gettag en interne, vous devez rechercher un hashmap et un tableau clairsemé. Ce qui n'est pas très efficace.

Remerciements Suriya.

Questions connexes