2010-07-07 4 views
2

J'ai un ListView qui affiche un ensemble de notes, chacune avec des quantités variables de données (c'est-à-dire que certaines ont une date d'échéance, d'autres non).Comment implémenter une vue personnalisée avec des champs variables?

Actuellement, chaque vue dans la liste est un RelativeLayout contenant un TextView pour chaque champ, plus deux Button et un CheckBox. Je cache ensuite simplement les champs inutilisés en définissant un faux visible sur chacun d'entre eux.

Cela a bien fonctionné, mais je suis sur le point d'ajouter beaucoup plus de champs de données aux notes et de gonfler que de nombreuses vues inutiles pour chaque ligne tueront sûrement mon application. J'ai besoin d'une solution plus dynamique.

J'ai décidé que la meilleure façon de procéder est de créer une vue personnalisée. Comment puis-je implémenter/concevoir ma vue afin qu'elle puisse afficher un nombre variable de champs de texte sans créer/détruire des textviews à chaque fois (ce qui serait assez cher et pire que ma situation actuelle), ou maintenir un grand nombre de textviews cachés?

Répondre

0

Vous pouvez créer une classe extends LinearLayout et utiliser addView pour placer dynamiquement vos vues.

+0

Cela nécessiterait de créer une nouvelle vue chaque fois que je devrais remplir ma liste et détruire les anciennes. J'aurais aussi besoin d'un moyen de les suivre. C'est le problème que j'essayais d'éviter dans mon OP. – CodeFusionMobile

+0

extension 'LinearLayout' permettra d'utiliser un peu de recyclage si vous le souhaitez. Si vous devez d'abord ajouter un TextView, vérifiez s'il y en a un, sinon, créez-en un nouveau. – Macarse

0

Semble que vous pourriez vouloir regarder dans une vue avec un stub. Les stubs gagneront de l'espace jusqu'à ce qu'ils soient gonflés, de sorte que chaque rangée sera plus légère jusqu'à ce qu'elle soit utilisée sur une vue plus large. Si vous avez un nombre relativement faible de ces vues plus grandes, vous pourriez économiser un peu de frais généraux.

+0

Ce serait bien, mais je ne suis pas sûr à quel point cela jouterait avec le recycleur de ListView. Une fois que le Stub est remplacé, je suis coincé avec le remplacement de tout un tas de vues à nouveau et je reçois une optomisation une fois. – CodeFusionMobile

+0

Ya, une fois que les vues ont été ajoutées, je ne vois pas de moyen de les ajouter/supprimer ou de les cacher/de les montrer sur le recyclage. Le meilleur scénario que je puisse voir est d'obtenir une optimisation des vues qui finissent par être recyclées pour les plus petites vues. – jqpubliq

Questions connexes