Quiero saber la diferencia entre usar BaseAdapter
y ArrayAdapter
.
He logrado lo que quiero ArrayAdapters
.
¿Afecta el rendimiento de la ListView
interfaz del adaptador en la que se implementa?
Y, la última pregunta es, ¿puedo lograr algo con el ListView
uso de cualquiera de estos Adapters
, o hay ciertos casos en los que solo se puede usar un adaptador específico?
android
performance
listview
android-arrayadapter
baseadapter
Chintan Soni
fuente
fuente
Respuestas:
Esta es la diferencia:
BaseAdapter
es un adaptador muy genérico que te permite hacer prácticamente lo que quieras. Sin embargo, tienes que codificarte un poco más para que funcione.ArrayAdapter
es una implementación más completa que funciona bien para datos en arreglos oArrayList
s. De manera similar, hay un relacionadoCursorAdapter
que debe usar si sus datos están en formatoCursor
. Ambos se extiendenBaseAdapter
.Si sus datos se encuentran en una colección especializada de algún tipo o si no desea el comportamiento predeterminado que
ArrayAdapter
proporciona, es probable que desee ampliarBaseAdapter
para obtener la flexibilidad que necesita.El desempeño de cada uno realmente depende de cómo los implemente o cambie su comportamiento. En esencia, cualquiera de los dos puede ser igualmente efectivo (especialmente considerando que an
ArrayAdapter
es aBaseAdapter
).Puede hacer prácticamente lo que quiera con cualquier adaptador, pero tenga en cuenta que
BaseAdapter
es abstracto, por lo que no puede usarlo directamente.fuente
ArrayAdapter
proporciona (como lo menciona @ tanis-7x) es que solo puede haber 1TextView
dentro del elemento de la lista, en realidad un comportamiento muy limitado. Si hay varios controles en cada elemento de la lista, debe utilizarBaseAdapter
y realizar el trabajo usted mismo. Por supuesto que aún puedes usarloArrayAdapter
, porqueArrayAdapter
es unBaseAdapter
.BaseAdapter
es abstracto mientras seArrayAdapter
extiendeBaseAdapter
(es una implementación concreta de aBaseAdapter
). Si extiende porqueArrayAdapter
está heredando todas lasArrayAdapter
características de 'y, anula su implementación, puede modificar elArrayAdapter
comportamiento. Si extiendeBaseAdapter
, debe implementar todos los métodos Abstract, que ArrayAdapter ya implementa.No, no lo hace.
Si la implementación en el SDK satisface sus necesidades, ¿por qué necesita anularla y reinventar la rueda?
La principal diferencia entre ellos es que
BaseAdapter
no se puede crear una instancia mientras que seArrayAdapter
puedefuente
En respuesta a sus 3 preguntas:
(1) BaseAdapter , según los documentos de Android, es solo una superclase de varios tipos de adaptadores, uno de los cuales es
ArrayAdapter
. Hay una serie de otros adaptadores que se derivan deBaseAdapter
que se adaptan a diferentes propósitos. Como resultado, es improbable que exista alguna diferencia de eficiencia entre los dos; simplemente obtiene acceso a un conjunto diferente de funciones / métodos con las diversas subclases.(2) La eficiencia de su
ArrayAdapter
depende de la eficiencia de lo que está haciendo dentro de esa clase, es decir, el procesamiento de mapas de bits y otros datos.(3) Probablemente pueda encontrar una manera de trabajar
ListView
con un tipo diferente de adaptador, sin embargo, la razón por la queArrayAdapter
funciona es porque generalmente tiene sentido dado que el objetivo es crear una lista interactiva. ElArrayAdapte
toma unArray
, generalmente unArrayList
de objetos, que luego procesa para crear la información de respaldo para elListView
. En ese sentido, la configuración deArrayList
->ArrayAdapter
->ListView
lógicamente tiene sentido.fuente
Una diferencia más entre BaseAdapter y ArrayAdapters es que, si extiende el adaptador de matriz, debe llamar al constructor de superclase en el constructor de subclase.
Pero no hay una superclase para BaseAdapter. Como BaseAdapter sirve como superclase para todos los demás adaptadores
fuente
List<T> UserList;
en la clase que se extiendeArrayAdapter<T>
Aquí no podemos usar BaseAdapter como ArrayAdapter.
fuente
BaseAdapter
s son más minimalistas y personalizables.ArrayAdapter
s implementar los usos más generales deListAdapter
s, pero a veces no son suficientes.Sin embargo, casi todo se puede lograr mediante el uso de
ArrayAdapter
s. Si sus listas ya funcionan utilizando ArrayAdapter correctamente, no tiene nada que ganar con BaseAdapter.Sin embargo, si está almacenando su implementación de ArrayAdapter
Context
,Arrays
oLists
en su implementación, tal vez desee cambiar aBaseAdapter
, comoArrayAdapter
ya ya los tiene implementados.De todos modos, si está haciendo eso, siempre puede eliminar esos elementos y recurrir al uso
getItem()
para obtener los elementos de la matriz,getCount()
obtener el tamaño de la matriz egetContext()
inflar sus vistas.fuente