Recyclerview de Android vs ListView con el usuario
Recientemente me encontré con el android RecycleView
que fue lanzado con Android 5.0 y parece que RecycleView
es sólo un tradicional encapsulado ListView
con el patrón de ViewHolder incorporado en él, que promueve la reutilización de la vista, en lugar de la creación de cada vez.
¿Cuáles son los otros beneficios de usar RecycleView
? Si ambos tienen el mismo efecto en términos de rendimiento, ¿por qué elegir el uso de RecycleView?
- Implementar un RecyclerView en un fragmento
- Cómo implementar filtrado en RealmRecyclerViewAdapter
- Horizontal RecyclerView interior vertical ScrollView
- Vista previa de recyclerview horizontal en android studio
- AppBarLayout no siempre vuelve a entrar en desplazamiento hacia abajo
Editar
Me pareció que la gente ha hecho preguntas similares y las respuestas no son concluyentes, agregándolos aquí para el mantenimiento de registros.
Recyclerview vs Listview
¿Deberíamos usar RecyclerView para reemplazar ListView?
¿Por qué RecyclerView no tiene onItemClickListener ()? Y ¿Cómo es RecyclerView diferente de Listview?
- ¿Deberíamos usar RecyclerView para reemplazar ListView?
- ¿Cómo mostrar los datos de la base de datos en un RecyclerView con alto rendimiento?
- Android Recyclerview Layoutmanager's onLayoutChildren llamado cuando se cambia el contenido del elemento
- Decoración de artículos Proguard y RecyclerView
- Android: RecyclerView dentro de un ScrollView (o paralaje)
- Los fragmentos ViewPager hacen referencia al mismo RecyclerView y / o Adapter
- Cómo agregar Android Support v7 bibliotecas en eclipse?
- Agregue RecyclerView (RecyclerFragment) a un cuadro de diálogo
Con el advenimiento de Android Lollipop, el RecyclerView hizo su camino oficialmente. El RecyclerView es mucho más potente, flexible y una mejora importante sobre ListView . Intentaré darle una penetración detallada en él.
1) Patrón de ViewHolder
En un ListView, se recomendó utilizar el patrón ViewHolder pero nunca fue una compulsión. En caso de RecyclerView, esto es obligatorio usando la clase RecyclerView.ViewHolder . Esta es una de las principales diferencias entre ListView y RecyclerView.
Esto hace que las cosas sean un poco más complejas en RecyclerView, pero muchos problemas que enfrentamos en el ListView se resuelven de manera eficiente.
2) LayoutManager
Esta es otra mejora masiva traída al RecyclerView. En un ListView, el único tipo de vista disponible es el ListView vertical. No existe una forma oficial de implementar un ListView horizontal.
Ahora usando un RecyclerView, podemos tener un
I) LinearLayoutManager – que soporta listas verticales y horizontales,
Ii) StaggeredLayoutManager – que apoya Pinterest como listas escalonadas,
Iii) GridLayoutManager – que admite la visualización de cuadrículas como se ve en las aplicaciones de Galería.
Y lo mejor es que podemos hacer todo esto dinámicamente como queremos.
3) Animador del artículo
ListViews carecen de soporte de buenas animaciones, pero el RecyclerView trae una nueva dimensión. Utilizando la clase RecyclerView.ItemAnimator , animar las vistas se vuelve mucho más fácil e intuitivo.
4) Decoración del artículo
En el caso de ListViews, dinámicamente decorar elementos como agregar bordes o divisores nunca fue fácil. Pero en el caso de RecyclerView, la clase RecyclerView.ItemDecorator da un gran control a los desarrolladores, pero hace que las cosas un poco más lento y complejo.
5) OnItemTouchListener
Interceptar clics de elemento en un ListView fue simple, gracias a su interfaz AdapterView.OnItemClickListener . Pero el RecyclerView da mucho más poder y control a sus desarrolladores por el RecyclerView.OnItemTouchListener, pero complica las cosas un poco para el desarrollador.
En palabras simples, el RecyclerView es mucho más personalizable que el ListView y da mucho control y poder a sus desarrolladores.
Bueno, tan poco de excavación y encontré estas gemas de Bill Philips artículo sobre RecycleView
RecyclerView puede hacer más que ListView, pero la clase RecyclerView tiene menos responsabilidades que ListView. Fuera de la caja, RecyclerView no:
- Colocar los elementos en la pantalla
- Animar vistas
- Maneje cualquier evento de toque aparte de desplazarse
Todas estas cosas se cocinaron en ListView, pero RecyclerView utiliza clases de colaborador para hacer estos trabajos en su lugar.
Los ViewHolders que creas son más robustos, también. Ellos subclase
RecyclerView.ViewHolder
, que tiene un montón de métodos queRecyclerView
utiliza.ViewHolders
sabe a qué posición están enlazados actualmente, así como qué identificadores de elemento (si los tiene). En el proceso,ViewHolder
ha sido caballero. Solía ser el trabajo de ListView para mantener la vista de todo el elemento, yViewHolder
sólo se mantiene en pequeños pedazos de la misma.Ahora, ViewHolder se mantiene en todo en el campo
ViewHolder.itemView
, que se asigna en el constructor de ViewHolder para usted.
La otra ventaja de usar RecycleView
es la animación, se puede hacer en dos líneas de código
RecyclerView.ItemAnimator itemAnimator = new DefaultItemAnimator(); recyclerView.setItemAnimator(itemAnimator);
Pero el widget sigue en bruto, por ejemplo, no puede crear el encabezado y el pie de página .
Más del artículo de Bill Phillip (ve a leerlo), pero pensé que era importante señalar lo siguiente.
En ListView, había cierta ambigüedad acerca de cómo manejar eventos de clic: ¿Deberían las vistas individuales manejar esos eventos o debería ListView manejarlos a través de OnItemClickListener? En RecyclerView, sin embargo, el ViewHolder está en una posición clara para actuar como un objeto controlador de nivel de fila que maneja ese tipo de detalles.
Vimos anteriormente que LayoutManager manejaba las vistas de posicionamiento, y ItemAnimator trataba de animarlas. ViewHolder es la última pieza: es responsable de manejar cualquier evento que ocurra en un elemento específico que muestra RecyclerView.
Utilicé un cargador de imágenes ListView
con Glide, con crecimiento de memoria. Luego reemplazé el ListView
con un RecyclerView
. No sólo es más difícil en la codificación, sino que también conduce a un uso de memoria más que un ListView
. Al menos, en mi proyecto.
En otra actividad utilicé una lista compleja con EditText's
. En algunos de ellos un método de entrada puede variar, también se puede aplicar TextWatcher
. Si usé un ViewHolder
, ¿cómo podría reemplazar un TextWatcher
durante el desplazamiento? Por lo tanto, he utilizado un ListView
sin un ViewHolder
, y funciona.
- Llamar a un método java desde c ++ en Android
- GetSupportActionBar desde el interior de Fragment ActionBarCompat