usar tutorial studio son recyclerview qué los listas item elementos dinamicas cuando construyen android listview android-recyclerview

son - recyclerview tutorial android studio



¿Deberíamos usar RecyclerView para reemplazar ListView? (6)

Los documentos de Android dicen:

El widget RecyclerView es una versión más avanzada y flexible de ListView. Este widget es un contenedor para mostrar grandes conjuntos de datos que se pueden desplazar de manera muy eficiente manteniendo un número limitado de vistas. Use el widget RecyclerView cuando tenga colecciones de datos cuyos elementos cambien en tiempo de ejecución en función de la acción del usuario o los eventos de red

En realidad, ListView puede hacer todo lo anterior si la eficiencia no importa, y hemos encontrado muchos problemas cuando usamos RecyclerView para reemplazar ListView :

  1. No hay onItemClickListener () para la selección de elementos de la lista - solution

  2. Sin divisor entre los elementos de la lista: solution

  3. Sin selector de superposición incorporado, no hay comentarios visuales cuando hace clic en el elemento de la lista - solution

  4. No addHeaderView para el encabezado de la lista - solution

Quizás más problemas ...

Entonces, cuando usamos RecyclerView para reemplazar ListView , tenemos que hacer mucha codificación adicional para alcanzar el mismo efecto que ListView .

PREGUNTA:

  • ¿Vale la pena reemplazar totalmente ListView con RecyclerView ?
  • si no, ¿en qué caso deberíamos usar RecyclerView lugar de ListView y viceversa?

El único caso cuando todavía está bien usar ListView es cuando la lista no es dinámica ni está afectada por eventos de red. Por ejemplo: navegación.

Para cualquier otro uso, RecyclerView eclipsa ListView. Dado que RecyclerView solo se preocupa por el reciclaje, será más fácil hacer cosas visuales relacionadas que estén estrechamente acopladas en ListView, como cambiar la posición / reorganización, animación (de hecho, viene con RecyclerView.ItemAnimator), diseños personalizados (el stock tiene StaggeredGrid además de la lista anterior o el estilo de cuadrícula, pero también existe esta library que la extiende aún más).

Además, si desea usar CardView, creo que es el único camino a seguir (algunas buenas lecturas sobre cuándo usar la tarjeta o la lista).


Hasta hace poco, todavía usaba ListView para listas muy simples. Por ejemplo, si quiero mostrar una lista simple de opciones de texto ...

Basé esa decisión en ''factores humanos'', que crear un ListView simple con menos código es mejor si el rendimiento es irrelevante. A menudo pienso en un profesor en la universidad al que le gustaba decir: "Mi maestro, el gran Niclaus Wirth, el inventor de Pascal, solía decir que si un programa tiene más de 50 líneas de código, seguramente estará equivocado ..."

Pero lo que me ha convencido de dejar de usar ListView es que recientemente se ha movido a la categoría "Legado" en la herramienta de diseño de Android Studio junto con RelativeLayout.

Creo que esta es una forma ''blanda'' de ''desaprobación''. Sería demasiado perjudicial si en realidad fuera desaprobado y todos los desarrolladores conscientes movieran su código a RecyclerView.

Además, la introducción a ListView advierte en la parte superior que RecyclerView es una mejor opción: "Para un enfoque más moderno, flexible y eficaz para mostrar listas, use RecyclerView".
https://developer.android.com/reference/android/widget/ListView

Además, la guía de ListView sigue hablando de cargadores de cursor, pero getSupportCursorLoader () en sí mismo ha quedado en desuso en la API 28.
https://developer.android.com/guide/topics/ui/layout/listview

Mejoras recientes a Android Studio:

Archivo -> Nuevo -> Fragmento -> Fragmento (Lista)

Esto nos da un RecylerView completamente funcional, poblado con texto básico. Eso elimina mi última razón real para usar ListView porque ahora es igual de fácil configurar un RecylerView básico.

En resumen, no tengo la intención de usar ListView en absoluto para un nuevo desarrollo porque etiquetarlo tiene ''legado'' está a un paso de despreciarlo.


Según yo, si ListView satisface todas las necesidades actuales de su aplicación y satisface todos los casos de uso, entonces no hay necesidad de reemplazarlo con un RecyclerView.

El RecyclerView otorga un gran poder a sus desarrolladores a costa de aumentar la complejidad para los desarrolladores. Hay ciertas cosas que podrían hacerse fácilmente en un ListView ahora pueden requerir un esfuerzo innecesario.

Pero sí, hay muchas cosas que un ListView nunca puede hacer, como la sorprendente función LayoutManager que le permite cambiar dinámicamente el diseño a horizontal, vertical, cuadrícula o cuadrícula escalonada sin problemas.

Escribí una respuesta detallada sobre este tema here .


Si ListView funciona para usted, no hay razón para migrar. Si está escribiendo una nueva interfaz de usuario, podría estar mejor con RecyclerView.

RecyclerView es potente cuando necesita personalizar su lista o desea mejores animaciones. Esos métodos de conveniencia en ListView causaron muchos problemas a las personas, por eso RecyclerView les ofrece una solución más flexible.

El cambio principal que necesita hacer para la migración está en su adaptador. Si desea seguir llamando a notifyDataSetChanged , pierde la mayoría de los beneficios de animación y enlace. Pero si puede cambiar su adaptador para enviar eventos de notificación detallados (agregados / eliminados / movidos / actualizados), obtendrá mejores animaciones y rendimiento. Estos eventos le permiten a RecyclerView elegir animaciones correctas y también le ayuda a evitar llamadas onBind innecesarias. Obtendrá un gran beneficio si las vistas de sus elementos son complejas. Además, en el futuro, habrá más componentes alrededor de RecyclerView.


Una gran alternativa es usar BaseAdapter. Es compatible con el uso del patrón Viewholder y el mío contiene más de 100 filas con mapas de bits y botones y funciona muy bien.


1 Puede usar una interfaz para proporcionar un escucha de clics. Yo también uso esta técnica con ListViews.
2 Sin divisor: simplemente agregue en su fila una Vista con un ancho de match_parent y una altura de 1dp y dele un color de fondo .
3 Simplemente use un selector StateList para el fondo de la fila.
4 addHeaderView también se puede evitar en ListViews: simplemente coloque el encabezado fuera de la vista.

Entonces, si la eficiencia es su preocupación, entonces , es una buena idea reemplazar un ListView con un RecyclerView.