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:

  • 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.)

¿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.

  • Lista de desplazamiento infinito de Android en ambas direcciones
  • Escritura de datos grabados PCM en un archivo .wav (java android)
  • Eliminación post-compilación de anotaciones del código de bytes
  • Android: ExpandableListViews y casillas de verificación
  • Android Apk decompilación parece fácil
  • Cómo obtener el índice seleccionado de un grupo de radio en Android
  • Detener una ejecución en un hilo independiente
  • Plugin de servicio de fondo de Android en el teléfono
  • Vista web de Android Timeout si tarda más de un cierto tiempo en cargar
  • ¿Cómo obtengo un botón para abrir otra actividad en Android Studio?
  • Advertencia: Actividad no iniciada, su tarea actual ha sido llevada al frente
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.