Je veux connaître la différence entre utiliser BaseAdapter
et ArrayAdapter
.
J'ai réalisé ce que je voulais ArrayAdapters
.
Cela affecte-t-il les performances de l' ListView
interface de l'adaptateur dans laquelle il est implémenté?
Et, la dernière question est, puis-je réaliser quelque chose en ListView
utilisant l'un de ces éléments Adapters
, ou, dans certains cas, seul un adaptateur spécifique peut être utilisé?
android
performance
listview
android-arrayadapter
baseadapter
Chintan Soni
la source
la source
Réponses:
Voici la différence:
BaseAdapter
est un adaptateur très générique qui vous permet de faire à peu près tout ce que vous voulez. Cependant, vous devez coder un peu plus vous-même pour que cela fonctionne.ArrayAdapter
est une implémentation plus complète qui fonctionne bien pour les données dans des tableaux ou desArrayList
s. De même, il existe un lienCursorAdapter
que vous devez utiliser si vos données sont dans un fichierCursor
. Les deux s'étendentBaseAdapter
.Si vos données se trouvent dans une collection spécialisée ou si vous ne voulez pas du comportement par défaut
ArrayAdapter
fourni, vous souhaiterez probablement les étendreBaseAdapter
pour obtenir la flexibilité dont vous avez besoin.La performance de chacun dépend vraiment de la façon dont vous les implémentez ou modifiez leur comportement. À la base, l'un ou l'autre peut être tout aussi efficace (d'autant plus que an
ArrayAdapter
est aBaseAdapter
).Vous pouvez faire à peu près tout ce que vous voulez avec n'importe quel adaptateur, mais gardez à l'esprit que
BaseAdapter
c'est abstrait, vous ne pouvez donc pas l'utiliser directement.la source
ArrayAdapter
fournit (comme mentionné par @ tanis-7x) est qu'il ne peut y avoir qu'un seulTextView
dans l'élément de liste, en fait un comportement très limité. S'il y a plusieurs contrôles dans chaque élément de liste, vous devez utiliserBaseAdapter
et pour le travail par vous-même. Bien sûr, vous pouvez toujours utiliserArrayAdapter
, carArrayAdapter
c'est un fichierBaseAdapter
.BaseAdapter
est abstrait tandis queArrayAdapter
s'étendBaseAdapter
(c'est une implémentation concrète de aBaseAdapter
). Si vous étendez pourArrayAdapter
vous héritez de toutes lesArrayAdapter
fonctionnalités de et, remplacez son implémentation, vous pouvez modifier leArrayAdapter
comportement. Si vousBaseAdapter
étendez, vous devez implémenter toutes les méthodes abstraites, qu'ArrayAdapter implémente déjà.non.
Si la mise en œuvre dans le SDK répond à vos besoins, pourquoi devez-vous la remplacer et réinventer la roue?
La principale différence entre eux est qu'ils
BaseAdapter
ne peuvent pas être instanciés alors qu'ilsArrayAdapter
peuventla source
En réponse à vos 3 questions:
(1) BaseAdapter , selon la documentation Android, n'est qu'une superclasse d'un certain nombre de types d'adaptateurs, dont l'un est
ArrayAdapter
. Il existe un certain nombre d'autres adaptateurs dérivésBaseAdapter
qui répondent à des objectifs différents. En conséquence, il est peu probable qu'il y ait une différence d'efficacité entre les deux; vous avez juste 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 faites dans cette classe, c'est-à-dire le traitement des bitmaps et d'autres données.(3) Vous pourriez probablement trouver un moyen de travailler en
ListView
utilisant un autre type d'adaptateur, cependant, la raisonArrayAdapter
fonctionne parce que cela a généralement du sens étant donné que l'objectif est de créer une liste interactive. LeArrayAdapte
prend unArray
, généralement unArrayList
objet, qu'il traite ensuite pour créer les informations de sauvegarde pour leListView
. En ce sens, la configuration deArrayList
->ArrayAdapter
-> aListView
tout simplement un sens.la source
Une autre différence entre BaseAdapter et ArrayAdapters est que si vous étendez l'adaptateur de tableau, vous devez appeler le constructeur de super-classe dans le constructeur de sous-classe.
Mais il n'y a pas de super classe pour BaseAdapter. Comme BaseAdapter sert de super classe pour tous les autres adaptateurs
la source
List<T> UserList;
dans la classe qui s'étendArrayAdapter<T>
Ici, nous ne pouvons pas utiliser BaseAdapter comme ArrayAdapter.
la source
BaseAdapter
s sont plus minimes et personnalisables.ArrayAdapter
s implémentent les utilisations les plus générales deListAdapter
s, mais parfois elles ne suffisent pas.Cependant, presque tout peut être réalisé en utilisant
ArrayAdapter
art. Si vos listes fonctionnent déjà en utilisant correctement ArrayAdapter, vous n'avez rien à gagner de BaseAdapter.Cependant, si vous stockez votre
Context
,Arrays
ouLists
dans votre implémentation ArrayAdapter, vous voudrez peut-être passer àBaseAdapter
, commeArrayAdapter
déjà implémenté.Quoi qu'il en soit, si vous faites cela, vous pouvez toujours supprimer ces éléments et recourir à l'utilisation
getItem()
pour obtenir les éléments du tableau,getCount()
pour obtenir la taille du tableau etgetContext()
pour gonfler vos vues.la source