Quiero saber la diferencia entre usar BaseAdaptery ArrayAdapter.
He logrado lo que quiero ArrayAdapters.
¿Afecta el rendimiento de la ListViewinterfaz del adaptador en la que se implementa?
Y, la última pregunta es, ¿puedo lograr algo con el ListViewuso 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:
BaseAdapteres 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.ArrayAdapteres una implementación más completa que funciona bien para datos en arreglos oArrayLists. De manera similar, hay un relacionadoCursorAdapterque 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
ArrayAdapterproporciona, es probable que desee ampliarBaseAdapterpara 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
ArrayAdapteres aBaseAdapter).Puede hacer prácticamente lo que quiera con cualquier adaptador, pero tenga en cuenta que
BaseAdapteres abstracto, por lo que no puede usarlo directamente.fuente
ArrayAdapterproporciona (como lo menciona @ tanis-7x) es que solo puede haber 1TextViewdentro del elemento de la lista, en realidad un comportamiento muy limitado. Si hay varios controles en cada elemento de la lista, debe utilizarBaseAdaptery realizar el trabajo usted mismo. Por supuesto que aún puedes usarloArrayAdapter, porqueArrayAdapteres unBaseAdapter.BaseAdapteres abstracto mientras seArrayAdapterextiendeBaseAdapter(es una implementación concreta de aBaseAdapter). Si extiende porqueArrayAdapterestá heredando todas lasArrayAdaptercaracterísticas de 'y, anula su implementación, puede modificar elArrayAdaptercomportamiento. 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
BaseAdapterno se puede crear una instancia mientras que seArrayAdapterpuedefuente
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 deBaseAdapterque 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
ArrayAdapterdepende 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
ListViewcon un tipo diferente de adaptador, sin embargo, la razón por la queArrayAdapterfunciona es porque generalmente tiene sentido dado que el objetivo es crear una lista interactiva. ElArrayAdaptetoma unArray, generalmente unArrayListde objetos, que luego procesa para crear la información de respaldo para elListView. En ese sentido, la configuración deArrayList->ArrayAdapter->ListViewló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
BaseAdapters son más minimalistas y personalizables.ArrayAdapters implementar los usos más generales deListAdapters, pero a veces no son suficientes.Sin embargo, casi todo se puede lograr mediante el uso de
ArrayAdapters. 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,ArraysoListsen su implementación, tal vez desee cambiar aBaseAdapter, comoArrayAdapterya 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