RecyclerView frente a ListView
Del desarrollador de Android ( Creación de listas y tarjetas ):
El widget RecyclerView es una versión más avanzada y flexible de ListView.
Vale, suena genial, pero cuando vi esta imagen de ejemplo, me confundí mucho acerca de la diferencia entre estos dos.
La imagen de arriba se puede crear fácilmente utilizando ListView
un adaptador personalizado.
Entonces, ¿en qué situación se debería utilizar RecyclerView
?
RecyclerView
se creó como una ListView
mejora, así que sí, puedes crear una lista adjunta con ListView
control, pero usarla RecyclerView
es más fácil porque:
Reutiliza celdas mientras se desplaza hacia arriba/abajo ; esto es posible implementando View Holder en el
ListView
adaptador, pero era algo opcional, mientras que en elRecycleView
adaptador es la forma predeterminada de escribir.Desacopla la lista de su contenedor , para que puedas colocar los elementos de la lista fácilmente en tiempo de ejecución en los diferentes contenedores (linearLayout, gridLayout) con la configuración
LayoutManager
.
Ejemplo:
mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
//or
mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2));
- Anima acciones de listas comunes : las animaciones se desacoplan y se delegan a
ItemAnimator
.
Hay más sobre RecyclerView
, pero creo que estos puntos son los principales.
Entonces, para concluir, RecyclerView
se trata de un control más flexible para el manejo de "datos de lista" que sigue patrones de delegación de preocupaciones y se deja solo una tarea: reciclar artículos.
Para que las vistas de lista tengan un buen rendimiento, necesitará implementar el patrón de soporte, y eso es fácil de estropear, especialmente cuando desea completar la lista con varios tipos diferentes de vistas.
RecyclerView incorpora este patrón, lo que hace que sea más difícil equivocarse. También es más flexible, lo que facilita el manejo de diferentes diseños, que no son lineales, como una cuadrícula.