Quelle est la différence entre BaseAdapter et ArrayAdapter?
Je veux savoir la différence entre l'utilisation de BaseAdapter
et ArrayAdapter
.
J'ai été atteinte de ce que je veux à travers ArrayAdapters
.
- T-il sur les performances de la ListView
sur l'interface de la carte à laquelle il est mis en œuvre ?
Et la dernière question est, puis-je réaliser quoi que ce soit à faire avec ListView
à l'aide de l'un de ces Adapters
, ou, il y a certains cas où adaptateur spécifique ne peut être utilisé?
- developer.android.com/reference/android/widget/.... ArrayAdpter. developer.android.com/reference/android/widget/BaseAdapter.html. BaseAdapter. ArrayAdapter est un béton sous-classe de BaseAdapter
- Simplement ArrayAdapter est déjà construit, nous avons juste besoin de l'utiliser. mais le BaseAdapter est plus générique adaptateur pour lesquelles nous avons besoin de fournir de la mise en œuvre .(getView(),getcount (), etc méthodes Adaptateur)
InformationsquelleAutor Chintan Soni | 2013-05-28
Vous devez vous connecter pour publier un commentaire.
Voici 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 ouArrayList
s. De même, ilCursorAdapter
que vous devriez utiliser si vos données sont dans unCursor
. Deux de ces étendreBaseAdapter
.Si vos données sont dans une collection spécialisée, de la sorte, ou si vous ne voulez pas le comportement par défaut que
ArrayAdapter
, vous aurez probablement envie de prolongerBaseAdapter
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 (d'autant que, d'une
ArrayAdapter
est unBaseAdapter
).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.ArrayAdapter
offre (tel que mentionné par @tanis-7x ) est qu'il peut y avoir seulement 1TextView
à l'intérieur de l'élément de la liste, en réalité très limitée comportement. Si il y a plusieurs contrôles dans chaque élément de la liste, vous devez utiliserBaseAdapter
et à l'emploi par vous-même. Bien sûr, vous pouvez toujours utiliserArrayAdapter
, parce queArrayAdapter
est unBaseAdapter
.BaseAdapter
est abstrait tout enArrayAdapter
s'étendBaseAdapter
(c'est une mise en œuvre concrète d'unBaseAdapter
). Si vous s'étend pourArrayAdapter
vous hériter de tous lesArrayAdapter
's caractéristiques et des, substituer à sa mise en œuvre, vous pouvez modifier laArrayAdapter
comportement. Si vous s'étendBaseAdapter
vous doit implémenter toutes les méthodes Abstraites, qui ArrayAdapter implémente déjà.non, il ne fonctionne pas.
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
BaseAdapter
peut pas instancier toutArrayAdapter
peutEn réponse à vos 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 deBaseAdapter
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 pourriez probablement trouver un moyen de travailler votre
ListView
l'aide d'un autre type d'adaptateur, cependant, la raisonArrayAdapter
fonctionne est parce que généralement c'est logique étant donné l'objectif est de construire une liste interactive. LeArrayAdapte
prend unArray
, généralement unArrayList
d'objets, qu'il traite ensuite de créer le support de l'information pour laListView
. En ce sens, la mise en place deArrayList
-->ArrayAdapter
-->ListView
suffit logiquement de sens.Une différence entre BaseAdapter et ArrayAdapters est, si vous étendez tableau adaptateur vous devez appeler super constructeur de la classe dans le constructeur de sous-classe.
Mais il n'est pas super classe pour BaseAdapter. Comme BaseAdapter sert de super-classe de toutes les autres cartes
List<T> UserList;
dans la classe qui s'étendArrayAdapter<T>
Ici, nous ne pouvons pas utiliser BaseAdapter comme ArrayAdapter.
BaseAdapter
s sont plus minimes et personnalisable.ArrayAdapter
s de mettre en œuvre les utilisations les plus générales deListAdapter
s, mais parfois ils ne sont pas assez.Cependant, presque tout peut être réalisé par l'utilisation de
ArrayAdapter
s. 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
ouLists
dans votre ArrayAdapter mise en œuvre, peut-être que vous aurez envie de passer àBaseAdapter
, commeArrayAdapter
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, etgetContext()
pour gonfler votre point de vue.