ListView ou TableLayout?

Je suis vraiment confus maintenant, qui l'apprendre. Je suis un développeur d'applications iPhone et j'apprends maintenant le développement Android.

, j'ai appris à utiliser un ListView avec un tableau statique de chaînes à l'aide d'un Adapter. Je suis habitué à utiliser des cellules personnalisées dans iPhone, principalement pour afficher du contenu dynamique comme des images et du texte dans TableView s.

Alors, quelle est la voie à suivre pour le faire dans Android? TableLayout ou ListView?

22
demandé sur Jonik 2012-08-28 08:37:30

3 réponses

Comme d'autres l'ont déjà dit dans les commentaires, vous devez définir clairement ce que vous voulez faire avant de prendre une décision concrète sur le type de mise en page à utiliser. Cependant, je peux certainement comprendre la confusion qui découle d'essayer de décider du type de classe de mise en page à utiliser, car il y en a souvent plusieurs à choisir pour atteindre le même objectif. Par exemple, pour créer une liste d'éléments à défilement vertical, vous pouvez d'abord choisir un LinearLayout vertical, que vous placez ensuite à l'intérieur d'un ScrollView. Mais d'un autre côté, pour obtenir un résultat final similaire, vous pouvez utiliser un ListView, ensemble, avec un Adapter.

De même, pour afficher une grille d'éléments qui peuvent défiler verticalement, vous pouvez utiliser un TableLayout à l'intérieur d'un ScrollView. Ou, un résultat similaire pourrait être obtenu en utilisant un GridView, encore une fois en fournissant des données via un Adapter approprié.

Maintenant, la première différence clé est la suivante: Les Classes comme LinearLayout et TableLayout exigent que vous fournissiez les éléments enfants soit dans des mises en page XML ou alternativement par programmation dans le code. Les Classes comme ListView et GridView (et plusieurs autres) sont très différentes car ce sont des sous-classes de android.widget.AdapterView. La particularité des classes AdapterView est qu'un Adapter est utilisé pour leur lier des données. Donc, pour revenir à l'exemple d'une liste verticale d'éléments, si vous affichez un groupe d'éléments de liste enfant dans un LinearLayout basé sur des données de tableau, vous devrez créer et ajouter par programme des Viewenfants dans ce LinearLayout basé sur les données de tableau. Avec ListView d'autre part, les Viewindividuels qui représentent les articles enfants sont fournis à partir d'un Adapter approprié. Donc, plutôt que de remplir la mise en page par programme avec tous les éléments enfants (comme ce serait le cas avec LinearLayout ou TableLayout par exemple), une mise en page basée sur Adapter appelle à la place Adapter pour obtenir les Viewenfants au fur et à mesure qu'il en a besoin.

Ce dernier point est la prochaine différence clé que je crois que vous devriez comprendre à propos des mises en page basées sur Adapter: elles sont beaucoup plus efficaces à montrant de grandes quantités de données, dans des situations où une grande partie des données est déroulée hors de la vue. Par exemple, un ListView est beaucoup plus efficace à utiliser pour afficher une grande liste de défilement d'éléments que si vous remplissez simplement un LinearLayout avec tous les éléments et le mettez dans un ScrollView. La raison de cette efficacité est que les mises en page basées sur AdapterView ne contiennent généralement pas tous les Viewenfants à la fois. Au lieu de cela, lorsque l'utilisateur fait défiler la liste, les vues enfants existantes sont "recyclées" ou " converties" par le Adapter pour afficher les éléments enfants suivants. Pour illustrer cela avec un exemple: vous voulez une liste verticale défilante de 100 éléments. L'écran peut seulement être assez grand pour afficher 7 à la fois, cependant. Imaginez que vous utilisez un LinearLayout dans un ScrollView pour afficher 100 éléments de liste. Cela signifie que le conteneur LinearLayout a 100 enfants Views. Ces enfants sont toujours présents dans la mise en page et doivent être traités par le système pendant les événements de défilement, même si seulement sept peuvent être visibles à l'écran en même temps. Cela prend temps CPU supplémentaire, une quantité considérable de RAM, et le défilement peut être lent. Maintenant, avec un ListView, la mise en page ne contiendra probablement que 7 ou 8 enfants Views. Au fur et à mesure que l'utilisateur défile, ces enfants Viewsont convertis dynamiquement ou ré-instanciés par le Adapter à travers lequel vous liez vos données. L'utilisateur connaîtra une opération de défilement plus rapide et plus fluide. Du point de vue de la programmation, il est généralement beaucoup plus élégant de lier des listes de données via un Adapter. Lorsque vous avez affaire à défilement listes ou grilles de Bitmaps, les contraintes de mémoire d'un périphérique Android signifient également que l'utilisation d'un AdapterView est à peu près essentielle.

Gardez à l'esprit que lorsque vous répondez à cela, j'ai supposé que vous essayez d'afficher une liste verticale ou tabulaire d'éléments défilables, y compris peut-être Bitmaps, et je me concentre sur le type de mise en page que vous utiliseriez pour réaliser la mise en page et le défilement de ces données. Classes de mise en page comme LinearLayout, TableLayout, etc. cependant sont des classes importantes que vous utiliserez tout le temps pour former des blocs de construction de mise en page individuels pour vos applications. Si votre liste entière est garantie pour tenir dans l'écran et ne sera pas défilable, alors la complexité supplémentaire de l'utilisation d'un Adapter (pas que est vraiment si compliqué) peut être inutile et vous pourriez alors juste vouloir utiliser un TableLayout ou autre.

74
répondu Trevor 2012-08-28 07:58:32

L'équivalent Android d'iOS UITableView est la classe ListView.

Il est très puissant et peut être rempli de données provenant de différentes sources en fonction du type d'Adaptateur que vous y attachez. Vous pouvez jeter un oeil à ce tutoriel ListView et ListActivity .

5
répondu keyboardsurfer 2012-08-28 07:18:40

1. Si vous voulez dynamic data sur CUSTOM VIEW dans la liste, puis ListView avec BaseAdapter ou ArrayAdapter est le chemin à parcourir.....

2. TableLayout sera de Utilisation complètement différente , la plupart du temps je l'utilise pour montrer les données qui doivent être affichées sous forme de pile..(c'est à dire l'un sur l'autre....)

Voir ces liens ci-dessous pour une compréhension rapide et mise en œuvre:

Http://www.ezzylearning.com/tutorial.aspx?tid=1763429

Http://www.vogella.com/articles/AndroidListView/article.html

2
répondu Kumar Vivek Mitra 2012-08-28 07:20:40