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

¿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 con recyclerview-v7 (lista, cuadrícula, cuadrícula escalonada), sino que otros pueden desarrollarse para escenarios alternativos (por ejemplo, niños superpuestos, para una StackView o Gallery ).

  • Las actualizaciones de los adaptadores pueden ser mucho más finas. Con AdapterView , tendrás que volver a dibujar toda la vista (por ejemplo, un ListView y todas sus filas) en cualquier cambio de significado, especialmente al agregar y quitar elementos. El mecanismo de actualización en los adaptadores RecyclerView 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 ofrece RecyclerView (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 un ItemDecorator . 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 lag ListView s.

Este problema se resuelve en RecylerView mediante 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. Otro punto a destacar aquí, es que al implementar el adaptador para RecyclerView , proporcionar un ViewHolder es obligatorio. Esto hace que la implementación sea un poco compleja, pero resuelve los problemas enfrentados en ListView .

Administrador de diseño

Cuando se habla de ListView s, sólo un tipo de ListView está disponible, es decir, el ListView vertical. No puede implementar un ListView 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 vs ListView , tenemos 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

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 Android RecyclerView vs ListView , 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 adaptadores ListView eran sencillos de implementar. Tenían un método principal getView 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 de RecyclerView , tiene toda la funcionalidad que tenían los adaptadores ListView excepto el soporte incorporado para los cursores de DB y ArrayLists. En RecyclerView.Adapter partir de ahora tenemos que hacer una implementación personalizada para suministrar datos al adaptador. Al igual que hace un BaseAdapter para ListView . Aunque si desea obtener más información sobre la implementación del adaptador RecyclerView , 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

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

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

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

  4. 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/

  • Android: Control Desplazamiento suave sobre la vista del reciclador
  • Recyclerview (Obtener elemento en Recyclerview)
  • Espresso Recylerview en ViewPager compara varias vistas
  • Actualizar ArrayList para mostrar nuevos datos en RecyclerView haciendo clic en Spinner Item
  • Cómo crear una interfaz de usuario como la aplicación Inbox de Google en Android
  • Recyclerview agregar datos a la parte superior sin desorden?
  • RecyclerView onItemClicked devolución de llamada
  • ¿Cómo desplazar el RecyclerView de forma programática por unos píxeles específicos?
  • GridLayoutManager 3 columnas en RecyclerView
  • Horizontalmente en RecyclerView (con GridLayoutManager)
  • Animación de RecyclerView en el clic de artículo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.