101 votes

Différence entre l'utilisation de BaseAdapter et ArrayAdapter

Je veux savoir la différence en utilisant BaseAdapter et ArrayAdapter, clairement, je ne comprends pas ce qui pour mettre en œuvre lorsque, comme je l'ai été atteinte de ce que je veux, par le biais ArrayAdapters. Pouvez-vous me faire savoir plus à ce sujet. S'il vous plaît.

Aussi, est-il affecte les performances de l' ListView, sur la carte d'interface-je mettre en œuvre ?

Et la dernière question est, puis-je réaliser quoi que ce soit à faire avec ListView de l'utilisation de ces Adapters, ou, il y a certains cas où adaptateur spécifique ne peut être utilisé ?

113voto

Tanis.7x Points 9536

La différence:

  • BaseAdapter est un très générique adaptateur qui permet de faire à peu près tout ce que vous voulez. Cependant, vous avez à faire un peu plus de codage-vous de le faire fonctionner.
  • ArrayAdapter est une implémentation plus complète qui fonctionne bien pour les données dans des tableaux ou ArrayLists. De même, il CursorAdapter que vous devriez utiliser si vos données sont dans un Cursor. Deux de ces étendre BaseAdapter.

Si vos données sont dans des collections spécialisées de la sorte, vous aurez probablement envie de prolonger BaseAdapter pour obtenir la flexibilité dont vous avez besoin.

La performance de chacun dépend vraiment de combien vous les mettre en œuvre ou de modification de leur comportement. À leur base, soit on peut être tout aussi efficace (surtout en considérant qu'un ArrayAdapter est un BaseAdapter).

Vous pouvez faire à peu près ce que vous voulez avec n'importe quel adaptateur, mais gardez à l'esprit que BaseAdapter est abstraite, de sorte que vous ne pouvez pas l'utiliser directement.

22voto

blackbelt Points 45840

BaseAdapter est abstrait tout en ArrayAdapter s'étend BaseAdapter (c'est un béton implementaion d'un BaseAdapter). Si vous prolonge ArrayAdapter vous êtes inhereting tous les ArrayAdapter'fonctions et des, substituer à sa mise en œuvre, vous pouvez modifier l' ArrayAdapter beahviour. Si vous prolonge BaseAdapter vous doit implémenter toutes les méthodes Abstraites, qui ArrayAdapter implémente déjà.

Aussi, est-il une incidence sur les performances de la ListView

non, il ne fonctionne pas.

Et la dernière question est, puis-je réaliser quoi que ce soit à faire avec ListView l'utilisation de ces Cartes, ou, il y a certains cas où adaptateur spécifique ne peut être utilisé ?

Si la mise en œuvre dans le sdk de répondre à vos besoins pourquoi vous avez besoin de le remplacer et de ré-inventer la roue?

La principale différence entre eux est que l' BaseAdapter ne peut pas être démarrent des instances tout en ArrayAdapter peut

9voto

Rarw Points 3683

En réponse à votre de 3 questions:

(1) BaseAdapter, selon les docs Android, c'est juste une super-classe d'un certain nombre de types d'adaptateurs, dont l'un est - ArrayAdapter. Il y a un certain nombre d'autres cartes qui sont dérivées à partir d' BaseAdapter qui correspondent à différentes fins. En conséquence, il est unlikley il n'y a aucune différence d'efficacité entre les deux; vous venez juste d'obtenir l'accès à un ensemble différent de fonctions/méthodes avec les différentes sous-classes.

(2) L'efficacité de votre ArrayAdapter dépend de l'efficacité de ce que vous êtes en train de faire à l'intérieur de cette classe, c'est à dire le traitement des images et d'autres données.

(3) Vous pouvez probablement trouver un moyen de travailler votre ListView en utilisant un autre type d'adaptateur, cependant, la raison ArrayAdapter fonctionne est parce que généralement c'est logique étant donné l'objectif est de construire une liste interactive. L' ArrayAdapte prend un Array, généralement en ArrayList d'objets, qu'il traite ensuite de créer le support de l'information pour l' ListView. En ce sens, la mise en place d' ArrayList --> ArrayAdapter --> ListView seulement logiquement de sens.

6voto

Amit Yadav Points 1112

Je voudrais ajouter un peu plus sur qui je me sens personnellement sur ArrayAdapter.

Toujours utiliser BaseAdapter comme ArrayAdapter est source de confusion.

Qu'est-ce que l'utilisation de ArrayAdapter pour le rendre générique même que nous pouvons faire avec notre source de données.

dire,

ArrayList<String> dataObject = new ArrayList<String>();

@Override
public int getCount() {
    return dataObject.size();
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    dataObject.get(position)
}

Et une autre chose à propos de la mise en page de ressources que nous avons à passer de super clazz et même est gonflé dans getView() Inutile de passage de la mise en page à super clazz

3voto

santirivera92 Points 2618

BaseAdapters sont plus minimes et personnalisable. ArrayAdapters de mettre en œuvre les utilisations les plus générales de l' ListAdapters, mais parfois ils ne sont pas assez.

Cependant, presque tout peut être réalisé par l'utilisation d' ArrayAdapters. Si vos listes sont déjà au travail en utilisant ArrayAdapter correctement, vous n'avez rien à gagner à partir de BaseAdapter.

Toutefois, si vous stockez votre Context, Arrays ou Lists dans votre ArrayAdapter mise en œuvre, peut-être que vous aurez envie de passer à BaseAdapter, ArrayAdapter a déjà mis en œuvre.

De toute façon, si vous faites cela, vous pouvez toujours supprimer ces éléments, et de recourir à l'aide de getItem() pour obtenir les éléments de Tableau, getCount() pour obtenir la taille de la matrice, et getContext() pour gonfler votre point de vue.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X