2010-06-16 11 views
2

Il y a une exigence d'avoir une liste dynamique non-triviale, dont chaque enregistrement est composé de plusieurs colonnes (textes, boutons). Il devrait ressembler à:Liste dynamique fantaisie dans Android: TableLayout vs ListView

Text11 Text12 Button1 Button2 
Text21 Text22 Button1 Button2 
... 

D'abord de façon évidente à accomplir qui semblait être TableLayout. Je m'attendais à avoir des données de mise en page/style spécifiées dans res/layout/*. Xml et à le remplir avec un jeu de données de code java (comme avec ListView, pour lequel il est possible de spécifier TextView d'élément en * .xml et le lier à un tableau utilisant ArrayAdapter). Mais après avoir joué pendant un moment, tout ce que j'ai trouvé possible est de remplir complètement TableLayout par programme. Cependant, la création de TableRow par TableRow et la définition d'attributs de disposition directement dans le code Java ne semblent pas assez élégantes.

Donc la question est: suis-je sur le bon chemin? Est-ce que TableLayout est vraiment le meilleur pour ce faire? Peut-être qu'il est plus approprié d'étendre ListView ou autre chose pour répondre à ces exigences? En utilisant ListView et ArrayAdapter, vous pouvez faire des mises en page plus compliquées que juste un TextView.

Répondre

4

Vous pouvez spécifier un LinearLayout avec 2 TextViews et 2 boutons pour chaque ligne de la liste.

est ici une question similaire Android: ListView elements with multiple clickable buttons

+0

En raison de votre réponse, j'ai reconsidéré ListView et j'ai réussi à le faire fonctionner au besoin, merci. – Ralkie

+1

Encore cela ne répond pas à la question. Est-il possible de remplir TableLayout avec ArrayAdapter – Nayn

+0

@Nayn - Bien sûr, c'est * possible *. Cela en vaut-il la peine, plutôt que d'utiliser le bon outil pour le travail (ListView)? Probablement pas, alors la réponse de James répond à la question. – kiswa

1

à mon humble avis, il dépend de la quantité de vos données, vous devez rendre.

La mise en page dinamiquement via inflate/addView est une tâche assez simple mais est également plus lente que l'utilisation d'un adaptateur personnalisé. avec un adaptateur personnalisé, vous pouvez réutiliser le paramètre convertView et ensuite définir les valeurs plus efficacement