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
?
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 View
enfants dans ce LinearLayout
basé sur les données de tableau. Avec ListView
d'autre part, les View
individuels 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 View
enfants 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 View
enfants à 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 View
s. Au fur et à mesure que l'utilisateur défile, ces enfants View
sont 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 Bitmap
s, 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 Bitmap
s, 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.
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 .
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