Podría explicar la getView() método de un ArrayAdapter.

He leído los documentos y tiene tres parámetros:

  • position: La posición del elemento dentro del adaptador del conjunto de datos de
    el elemento cuya posición se desea.
  • convertView: La antigua vista a la reutilización, si es posible. Nota: Usted debe comprobar que este punto de vista es no nulo y de un tipo adecuado antes de usar. Si no es posible convertir este punto de vista para mostrar los datos correctos, este método puede crear una nueva vista.

    Heterogéneo listas puede especificar su número de tipos de vista, por lo que este punto de Vista es siempre del tipo adecuado (ver getViewTypeCount() y getItemViewType(int)).
  • parent: El padre que este punto de vista eventualmente se adjunta a

Entendí el position parámetro. Como se dijo, que implica la posición del elemento, que ha sido solicitado.

¿De dónde convertView vienen. He visto muchos ejemplos en los que se compruebe si convertView es nulo. Si es null, se inflan una nueva instancia de la fila de diseño, llenar y devolver. Supongo que me he metido en mi cabeza también, pero una cosa que todavía me sorprende. ¿Cuál es la distribución que se pasa a través de la convertView parámetro. Es que si el recursos, el parámetro que se pasa al iniciar el ArrayAdapter? Se trata de una copia en caché de la última presentación devuelto por getView()?

Y por último. ¿Qué hace el parent parámetro hacer. No he visto demasiados ejemplos de utilización de este. La mayoría de ellos simplemente reutilizar/inflar una fila de diseño y devolverlo.

(Estoy preguntando, porque tengo un clic en la animación en mi ListView. Específicamente este que tiene como objetivo replicar Spotify lista desplegable del menú de acciones rápidas. Mi animación ha sido un poco lento. Después de diagnosticar este problema por un tiempo, me he dado cuenta de que esto ha sido debido al hecho de que mi getView() método toma un poco de tiempo para completar lo que me estoy inflando una fila fresco diseño en cada iteración. Alguien sugirió la caché de la fila de diseño en un ViewHolder mientras otros ejemplos punto de la reutilización de la convertView parámetro es decir, sólo inflar una fila de diseño si convertView es null.)

2 Comentarios

  1. 44

    Es es una copia en caché de la última presentación devuelto por getView()?

    La convertView es el punto de vista de una fila a la izquierda de la pantalla(por lo que no es la última vista devuelto por el getView método). Por ejemplo, la lista es la primera muestra, en este caso convertView es null, no en la fila fue previamente construido y a la izquierda de la pantalla. Si se desplaza hacia abajo, la fila 0 va a salir de la pantalla(no será visible), cuando eso ocurre, la ListView puede elegir mantener ese punto de vista en una caché para su uso posterior(esto tiene sentido, como las filas de una ListView generalmente tienen el mismo diseño, sólo con los datos de ser diferentes). La razón para mantener algunos puntos de vista en una caché, y luego utilizar es porque el getView método puede ser llamado un montón de veces(cada vez que el usuario se desplaza hacia arriba/abajo y las nuevas filas que aparecen en la pantalla). Si cada vez que la fila de vista tendría que ser recreado esto habría resultado en una gran cantidad de objetos se crean que es algo a evitar. En su getView el método de verificación convertView para ver si es null. Si es null entonces usted debe construir una nueva fila de la vista y rellenarla con los datos, si no es null, el ListView te ofrece una vista anterior. Tener esta vista anterior significa que usted no necesita construir una nueva fila de diseño, en lugar de debe rellenar con los datos correctos, como la caché de vista tiene el viejo de datos todavía pegada a él(usted verá un montón de preguntas en stackoverflow donde los usuarios preguntan por qué las filas de sus ListView están duplicando cuando se desplácese hacia abajo).

    Lo que hace el padre parámetro hacer. No he visto demasiados ejemplos
    la utilización de este. La mayoría de ellos simplemente reutilizar/inflar una fila de diseño y
    la devolución.

    Que debe ser usado para obtener la correcta LayoutParams para el recién inflado/construido fila. Por ejemplo, si usted inflar un diseño que tiene una RelativeLayout como la raíz y no utilizar el parent para obtener el LayoutParams que podría tener algunos problemas con la fila de diseño. Para tomar los padres en consideración deberá utilizar :

    convertView = getLayoutInflater().inflate(R.layout.row_layout, parent, false);
    • Esto es realmente una buena respuesta!
    • la mejor respuesta tnx
  2. 2

    Mi comprensión de convertView es que, esencialmente, se trata de puntos de vista que han sido reciclados debido a que no están siendo utilizados en el momento – por ejemplo, desplácese hacia abajo la lista, los que están en la parte superior que no están en la pantalla, por lo que se pasa en este parámetro para utilizar cuando se necesita un nuevo punto de vista (por lo que no tiene para crear algo nuevo, mientras que tener que no se utilicen sentados alrededor de inactividad). iOS tiene un método similar llamado dequeueReusableCellWithIdentifier. Si cada fila de la listview tiene la misma estructura, es seguro para lanzar esta al tipo adecuado y acabo de actualizar la información de texto, imágenes, etc. Va a ser un punto de Vista que se ha devuelto previamente por un getView() convocatoria de la misma lista.

    Mi mejor conjetura (y es cierto que es una suposición) con parent es que es el punto de vista de que este adaptador es un hijo de. Se le da una ruta en el sistema de representación si usted necesita un contexto, el acceso a los recursos del sistema, para pasar la información a o recibir información de la lista de la vista principal.

Dejar respuesta

Please enter your comment!
Please enter your name here