¿Cuál es la mejora de RecyclerView sobre ListView?
RecyclerView
se agrega a la v7 support library
desde Android API 22 oficialmente. Y mucha gente dijo que es una mejora sobre ListView
y muchas introducciones breves al uso de él fueron fijadas sobre el Internet. Pero la mayoría de estos artículos son muy simples, superficiales y huecos. La mejora es sólo RecyclerView.ViewHolder
, RecyclerView.ItemAnimator
o RecylerView.SmoothScroller
? ¿El recycling and reuse mechanism
de recycling and reuse mechanism
de las vistas de elementos durante el desplazamiento difiere de los de ListView
? ¿Y qué es exactamente la enhancement
de RecyclerView
sobre ListView
?
Cualquier respuesta, consejos o enlaces son apreciados. Gracias por adelantado.
- Cómo hacer la primera imagen más grande en Gridlayout?
- RecyclerView y SwipeRefreshLayout
- Android Cómo reciclar el mapa de bits correctamente cuando se utiliza RecyclerView?
- Cuándo usar ListView en lugar de RecyclerView
- Recyclerview con fondo de desplazamiento
- Reciclado horizontal con bordes de decoloración
- La vista de Recycler no se desplaza correctamente después de implementar el desplazamiento para actualizar el diseño.
- Cómo crear un menú contextual para RecyclerView
- Cómo refundir elementos en un RecyclerView con el StaggeredGridLayoutManager
- Recycler View Adapter con EditText
- RecyclerView: resalta el elemento seleccionado
- Recyclerview + Proveedor de contenido + CursorLoader
- ¿Por qué ListView y RecyclerView son focusableInTouchMode?
¿Y qué es exactamente la mejora de RecyclerView sobre ListView?
RecyclerView
no es un "realce" "sobre ListView
", estrictamente hablando. ListView
realmente hace algo; RecyclerView
, por sí solo, no lo hace. Una comparación más precisa sería que el marco de RecyclerView
es una mejora sobre AdapterView
y, en cierta medida, la clase padre de AbsListView
de ListView
y GridView
.
RecyclerView
centra en el reciclaje de widgets y en la gestión de View
niños. Delegar todo lo demás a otras clases. AdapterView
hace mucho menos de esto, lo que hace más difícil extender funcionalmente.
De nota:
-
La disposición de los niños, dentro del espacio desplazable del
RecyclerView
, se delega a los administradores. Por lo tanto, no sólo se envían tres conrecyclerview-v7
(lista, cuadrícula, cuadrícula escalonada), sino que otros pueden desarrollarse para escenarios alternativos (por ejemplo, niños superpuestos, para unaStackView
oGallery
). -
Las actualizaciones de los adaptadores pueden ser mucho más finas. Con
AdapterView
, tendrás que volver a dibujar toda la vista (por ejemplo, unListView
y todas sus filas) en cualquier cambio de significado, especialmente al agregar y quitar elementos. El mecanismo de actualización en los adaptadoresRecyclerView
indica las posiciones específicas que cambian. Esto no sólo requiere menos tiempo de procesamiento, sino que ayuda a habilitar los efectos animados que ofreceRecyclerView
(de nuevo, con reemplazos conectables) para agregar, mover y quitar elementos. -
Otras cosas que fueron "al horno" en
ListView
, como divisores de dibujo, ahora se extraen en puntos de extensión, como unItemDecorator
. Ahora, usted puede elegir cómo "decorar" los artículos, con divisores de línea o cajas o separadores de barra de color o lo que sea. Decoración no se limita a "divisores", pero puede afectar a cualquier cosa en los puntos de vista que, por una razón u otra, que consideran estar separado de las vistas de artículo sí mismos.
RecyclerView
, sin embargo, es bastante complicado para ponerse en marcha. Lo que obtiene de ListView
"fuera de la caja" requiere mucho más código, el suyo o el de una biblioteca de terceros, para que coincida. Para los desarrolladores experimentados, esto es una característica, en que el código es reemplazable con otro código. Para los recién llegados, esto es un error, ya que hay una curva de aprendizaje más empinada para RecyclerView
, IMHO.
Según la documentación oficial RecyclerView
es una mejora importante sobre ListView
. Contiene muchas características nuevas como ViewHolder
, ItemDecorator
, LayoutManager
y SmoothScroller
. Pero una cosa que sin duda le da una ventaja sobre el ListView
es; La capacidad de tener animaciones al agregar o quitar un elemento.
Ver titulares
En
ListView
, definir los tenedores de vistas era un enfoque sugerido para mantener las referencias de vistas. Pero no fue una compulsión. Aunque al no hacerlo,ListView
utilizó mostrar datos obsoletos. Otro inconveniente importante de no usar los titulares de la vista podría conducir a una operación pesada de encontrar puntos de vista por IDs cada vez. Lo que dio lugar a lagListView
s.Este problema se resuelve en
RecylerView
mediante el uso de la clase RecyclerView.ViewHolder . Esta es una de las principales diferencias enRecyclerView
yListView
. Al implementar unRecyclerView
esta clase se utiliza para definir un objetoViewHolder
que es utilizado por el adaptador para vincularViewHolder
con una posición. Otro punto a destacar aquí, es que al implementar el adaptador paraRecyclerView
, proporcionar unViewHolder
es obligatorio. Esto hace que la implementación sea un poco compleja, pero resuelve los problemas enfrentados enListView
.
Administrador de diseño
Cuando se habla de
ListView
s, sólo un tipo deListView
está disponible, es decir, elListView
vertical. No puede implementar unListView
con desplazamiento horizontal. Sé que hay maneras de implementar un desplazamiento horizontal, pero créanme que no fue diseñado para funcionar de esa manera.Pero ahora cuando miramos a Android
RecyclerView
vsListView
, tenemos soporte para colecciones horizontales también. De hecho, soporta múltiples tipos de listas. Para admitir varios tipos de listas, utiliza la claseRecyclerView.LayoutManager
. Esto es algo nuevo que ListView no tiene.RecyclerView
admite tres tipos de gestores de diseño predefinidos:LinearLayoutManager – Este es el gestor de diseño más utilizado en caso de RecyclerView. A través de esto, podemos crear listas de desplazamiento horizontal y vertical.
StaggeredGridLayoutManager – A través de este gestor de diseño, podemos crear listas escalonadas. Al igual que la pantalla de Pinterest.
GridLayoutManager – Este gestor de diseño se puede utilizar para mostrar cuadrículas, como cualquier galería de imágenes.
Animador del artículo
Animaciones en una lista es una dimensión completamente nueva, que tiene infinitas posibilidades. En un ListView, como tal, no hay disposiciones especiales a través de las cuales se puede animar, añadir o borrar elementos. En lugar más adelante como androide evolucionado ViewPropertyAnimator fue sugerido por Chet Haase de Google en este video tutorial para animaciones en
ListView
. Por otro lado comparando AndroidRecyclerView
vsListView
, tiene RecyclerView.ItemAnimator clase para el manejo de animaciones. A través de esta clase se pueden definir animaciones personalizadas para eventos de adición de elementos, supresión y movimiento. También proporciona un DefaultItemAnimator , en caso de que no necesite ninguna personalización.
Adaptador
ListView
adaptadoresListView
eran sencillos de implementar. Tenían un método principalgetView
donde toda la magia solía pasar. Donde los puntos de vista estaban vinculados a una posición. También solían tener un método interesante registerDataSetObserver donde se puede establecer un observador derecho en el adaptador. Esta característica también está presente en RecyclerView, pero se utiliza la clase RecyclerView.AdapterDataObserver . Pero el punto a favor de ListView es que soporta tres implementaciones predeterminadas de adaptadores:
ArrayAdapter
CursorAdapter
SimpleCursorAdapter
Mientras que el adaptador deRecyclerView
, tiene toda la funcionalidad que tenían los adaptadoresListView
excepto el soporte incorporado para los cursores de DB y ArrayLists. EnRecyclerView.Adapter
partir de ahora tenemos que hacer una implementación personalizada para suministrar datos al adaptador. Al igual que hace un BaseAdapter paraListView
. Aunque si desea obtener más información sobre la implementación del adaptadorRecyclerView
, consulte el ejemplo de Android RecyclerView .
Decoración del artículo
Para mostrar divisores personalizados en un ListView, uno podría haber agregado fácilmente estos parámetros en el XML de ListView:
android:divider="@android:color/transparent"
android:dividerHeight="5dp"
La parte interesante de Android RecyclerView es que, a partir de ahora no muestra un divisor entre los elementos de forma predeterminada. Aunque los chicos de Google deben haber dejado esto para la personalización, intencionalmente. Pero esto aumenta mucho el esfuerzo de un desarrollador. Si desea agregar un divisor entre los elementos, es posible que deba realizar una implementación personalizada mediante la clase RecyclerView.ItemDecoration . O puede aplicar un hack utilizando este archivo de muestras oficiales: DividerItemDecoration.java
Ver titulares
RecylerView por el uso de la clase RecyclerView.ViewHolder. Esta es una de las principales diferencias en RecyclerView y ListView. Al implementar un RecyclerView esta clase se utiliza para definir un objeto ViewHolder que es utilizado por el adaptador para vincular ViewHolder con una posición
Administrador de diseño
Soporte para colecciones horizontales también. De hecho, soporta múltiples tipos de listas. Para admitir varios tipos de listas, utiliza la clase RecyclerView.LayoutManager. Esto es algo nuevo que ListView no tiene. RecyclerView admite tres tipos de gestores de diseño predefinidos: LinearLayoutManager – Este es el gestor de diseño más utilizado en caso de RecyclerView. A través de esto, podemos crear listas de desplazamiento horizontal y vertical. StaggeredGridLayoutManager – A través de este gestor de diseño, podemos crear listas escalonadas. Al igual que la pantalla de Pinterest. GridLayoutManager- Este gestor de diseño se puede utilizar para mostrar cuadrículas, como cualquier galería de imágenes.
Animador del artículo
RecyclerView tiene la clase RecyclerView.ItemAnimator para manejar animaciones. A través de esta clase se pueden definir animaciones personalizadas para eventos de adición de elementos, supresión y movimiento. También proporciona un DefaultItemAnimator, en caso de que no necesite ninguna personalización.
Adaptador
En RecyclerView.Adapter a partir de ahora tenemos que hacer una implementación personalizada para suministrar datos al adaptador. Al igual que hace un BaseAdapter para ListViews.
Fuente: http://www.truiton.com/2015/03/android-recyclerview-vs-listview-comparison/