Explicación del método getView () de un ArrayAdapter
¿Podría explicar el método getView()
de un ArrayAdapter
?
He leído los documentos y tiene tres parámetros:
- Problema con aapt.exe
- Cómo programar una tarea en android
- Android studio no puede resolver el símbolo común, que falta en el paquete android.gms
- ¿Por qué puedo mover con éxito un archivo en Linux mientras se está escribiendo?
- Cómo hacer el "export jar" de Eclipse desde la línea de comandos
-
position
: La posición del elemento dentro del conjunto de datos del adaptador del elemento cuya vista deseamos. -
convertView
: La vista antigua para reutilizar, si es posible. Nota: Debe comprobar que esta vista no es nula y de un tipo apropiado antes de usar. Si no es posible convertir esta vista para mostrar los datos correctos, este método puede crear una vista nueva.
Las listas heterogéneas pueden especificar su número de tipos de vista, de modo que esta vista siempre sea del tipo correcto (consulte getViewTypeCount () y getItemViewType (int)). -
parent
: El padre que esta vista eventualmente se adjuntará a
Comprendí el parámetro de position
. Como dijeron, implica la posición del artículo, que la vista se ha pedido.
¿De convertView
viene convertView
? He visto muchos ejemplos donde comprueban si convertView
es nulo. Si es es nulo, inflar una nueva instancia del diseño de la fila, rellenarlo y devolverlo. Supongo que he conseguido mi cabeza alrededor de eso también, pero una cosa todavía me desconcierta. ¿Cuál es el diseño que se pasa a través del parámetro convertView
. ¿Es si el parámetro del resource
que se pasa en al inicializar el ArrayAdapter
? ¿Es una copia en caché del último diseño devuelto por getView()
?
Y por último. ¿Qué hace el parámetro parent
. No he visto demasiados ejemplos que utilizan esto. La mayoría de ellos simplemente reutilizar / inflar un diseño de fila y devolverlo.
(Estoy preguntando porque tengo una animación en el clic en mi ListView
esta que tiene como objetivo replicar el menú desplegable de acción rápida de Spotify.Mi animación ha sido un poco lenta.Después de diagnosticar este problema por un tiempo, me he dado cuenta Que esto se ha debido al hecho de que mi método getView()
toma un poco de tiempo para completar como estoy inflando un nuevo diseño de fila en cada iteración.Alguien sugirió ViewHolder
en caché el diseño de fila en un ViewHolder
mientras que otros ejemplos apuntan a reutilizar el Parámetro convertView
es decir, solo inflar un diseño de fila si convertView
es nulo.)
- Android - Spinner + setOnClickListener
- LibGDX - Texto sobre textura en tile / tilemaps
- La mejor manera de ordenar los datos
- La orientación de la vista previa en el modo horizontal se gira en el sentido de las agujas del reloj con Camera2 api
- ¿Por qué mi aplicación Android dice "No se puede reproducir el vídeo" después de la reproducción?
- Ejecutar archivo java en qt
- Cargar datos de clave pública del archivo
- Error de bucle en el emulador de Android
¿Es una copia en caché del último diseño devuelto por getView ()?
El convertView
es la vista de una fila que dejó la pantalla (por lo que no es la última vista devuelta por el método getView
). Por ejemplo, se muestra primero la lista, en este caso convertView
es null
, ninguna vista de fila fue construida previamente y dejó la pantalla. Si se desplaza hacia abajo, la fila 0 dejará la pantalla (ya no estará visible), cuando esto suceda, el ListView
puede optar por mantener esa vista en un caché para usarla más tarde (esto tiene sentido, ya que las filas de un ListView
generalmente tienen La misma disposición con solamente los datos que son diferentes). La razón para mantener algunas vistas en una memoria caché y usarlas posteriormente es porque el método getView
se puede llamar muchas veces (cada vez que el usuario desplaza hacia arriba o hacia abajo y aparecen nuevas filas en la pantalla). Si cada vez que la vista de la fila necesitara ser recreada esto habría dado lugar a muchos objetos que eran creados que es algo a evitar. En su método getView
verificará convertView
para ver si es null
. Si es null
, debe crear una nueva vista de fila y rellenarla con datos, si no es null
, ListView
ha ofrecido una vista previa. Tener esta vista anterior significa que no es necesario crear un nuevo diseño de fila, sino que debe rellenarlo con los datos correctos, ya que la vista en caché tiene los datos antiguos todavía adjuntos a él (vería un montón de preguntas sobre stackoverflow donde Los usuarios preguntan por qué las filas de su ListView
se duplican cuando se desplazan hacia abajo).
¿Qué hace el parámetro padre. No he visto demasiados ejemplos que utilizan esto. La mayoría de ellos simplemente reutilizar / inflar un diseño de fila y devolverlo.
Debe utilizarse para obtener los LayoutParams
correctos para la fila recién inflada / construida. Por ejemplo, si infla un diseño que tiene un RelativeLayout
como raíz y no utiliza el parent
para obtener LayoutParams
, podría tener algunos problemas con el diseño de fila. Para tomar el padre en consideración que usted utilizaría:
convertView = getLayoutInflater().inflate(R.layout.row_layout, parent, false);
Mi comprensión de convertView
es que son esencialmente las vistas que se han reciclado porque no se están utilizando actualmente – por ejemplo, usted rueda abajo de la lista, los que están en la tapa no están en la pantalla, así que se pasan en Este parámetro se utiliza cuando se necesita una nueva vista (por lo que no tiene que crear una nueva completamente mientras que los que no se usan estén sentados alrededor de la inactividad). IOS tiene un método similar llamado dequeueReusableCellWithIdentifier
. Si cada fila de su listview tiene la misma estructura, es seguro lanzar esto al tipo apropiado y apenas actualizar la información en él – texto, imágenes, etc. Será una visión que fue devuelta previamente por una llamada de getView()
La misma lista.
Mi mejor conjetura (y es admitir una conjetura) con el parent
es que es la visión que la lista de este adaptador es un niño de. Le proporciona una ruta de regreso al sistema de procesamiento si necesita un contexto, acceso al sistema de recursos, para pasar información a la vista principal de la lista o para recibirla.
- ¿Hay una manera de obtener el nombre del proceso actual en Android?
- ¿Cómo puedo pasar los parámetros de android Intent en el nuevo esquema de cromo?