android - que - RecyclerView vs. ListView
recyclerview dependency android (13)
RecyclerView
es un nuevo ViewGroup que está preparado para representar cualquier vista basada en un adaptador de manera similar. Se supone que es el sucesor deListView and GridView
, y se puede encontrar en lalatest support-v7 version
.RecyclerView
se ha desarrollado teniendo en cuenta la extensibilidad , por lo que es posible crear cualquier tipo de diseño que se pueda imaginar, pero no sin una pequeña dosis de dolor en el culo.
Respuesta tomada de Antonio Leiva.
compile ''com.android.support:recyclerview-v7:27.0.0''
RecyclerView
es de hecho una powerful view
que ListView
. Para más detalles puedes visitar esta página .
Desde el desarrollador de Android ( Creación de listas y tarjetas ):
El widget RecyclerView es una versión más avanzada y flexible de ListView.
Está bien, suena bien, pero cuando vi esta imagen de ejemplo, me confundí realmente sobre la diferencia entre los dos.
ListView
puede crear fácilmente la imagen de arriba con un adaptador personalizado.
Entonces, ¿en qué situación se debe usar RecyclerView
?
- Puede utilizar una interfaz para proporcionar un detector de clics. Yo uso esta técnica con ListViews, también.
- Sin divisor: Simplemente agregue en su fila una Vista con un ancho de match_parent y una altura de 1dp y asígnele un color de fondo.
- Simplemente use un selector de lista de estados para el fondo de la fila.
- addHeaderView también se puede evitar en ListViews: simplemente coloque el encabezado fuera de la vista.
Entonces, si lo que le preocupa es la eficiencia, entonces sí, es una buena idea reemplazar un ListView con un RecyclerView.
Además de las diferencias anteriores los siguientes son algunos más:
RV separa la creación de vista y el enlace de datos para ver. En LV, debe comprobar si convertView es nulo o no para crear una vista, antes de vincular los datos. Por lo tanto, en el caso de RV, la vista se creará solo cuando sea necesario, pero en el caso de LV, se puede omitir la comprobación de conversión y se creará una vista cada vez.
Cambiar entre Grid y List es más fácil ahora con LayoutManager.
No es necesario notificar y actualizar todos los elementos, incluso si solo se cambia un solo elemento.
Uno tenía que implementar el almacenamiento en caché de vistas en caso de LV. Se proporciona en RV por defecto. (Hay una diferencia entre el almacenamiento en caché de la vista y el reciclaje).
Animaciones de elementos muy fáciles en caso de RV.
Creo que la principal y mayor diferencia que tienen es que ListView
busca la posición del elemento mientras lo crea o lo pone, por otro lado, RecyclerView
busca el tipo de elemento. si hay otro elemento creado con el mismo tipo, RecyclerView
no lo crea nuevamente. Pregunta primero al adaptador y luego a Recycledpool, si el grupo reciclado dice "Sí, he creado un tipo similar a él", RecyclerView
no intenta crear el mismo tipo. ListView
no tiene este tipo de mecanismo de agrupación.
En mi opinión, RecyclerView
se hizo para solucionar el problema con el patrón de reciclaje utilizado en las vistas de lista porque dificultaba la vida del desarrollador. Todo lo demás que puedas manejar más o menos. Por ejemplo, uso el mismo adaptador para ListView
y GridView
, no importa en las dos vistas, getItemCount
, getTypeCount
, getTypeCount
se usa así que es lo mismo. RecyclerView
no es necesario si ListView
con ListAdapter
o GridView
con adaptadores de cuadrícula ya está funcionando para usted. Si ha implementado correctamente el patrón ViewHolder
en sus vistas de lista, entonces no verá ninguna gran mejora con respecto a RecycleView
.
Los siguientes son algunos puntos / diferencias clave entre RecyclerView y ListView. Tome su llamada con prudencia.
Si ListView funciona para usted, no hay razón para migrar. Si está escribiendo una nueva interfaz de usuario, es posible que esté mejor con RecyclerView.
RecylerView ha incorporado ViewHolder, no necesita implementar el nuestro como en listView. Es compatible con notificar a un índice particular, así
Cosas como animar la adición o eliminación de elementos ya se implementan en RecyclerView sin que tenga que hacer nada.
Podemos asociar un administrador de diseño con un RecyclerView, esto se puede usar para obtener vistas aleatorias en recycleview mientras que esto fue una limitación en ListView. En un ListView, el único tipo de vista disponible es el ListView vertical. No hay una forma oficial de implementar siquiera un ListView horizontal. Ahora usando un RecyclerView, podemos tener un
i) LinearLayoutManager, que admite tanto listas verticales como horizontales, ii) StaggeredLayoutManager, que admite Pinterest como listas escalonadas, iii) GridLayoutManager, que admite la visualización de cuadrículas como se ve en las aplicaciones de la Galería.
Y lo mejor es que podemos hacer todo esto dinámicamente como queramos.
Mayor ventaja:
ViewHolder
no está disponible de forma predeterminada en ListView
. Vamos a crear explícitamente dentro de getView()
. RecyclerView
ha incorporado Viewholder
.
Para que las vistas de la lista tengan un buen rendimiento, deberá implementar el patrón del titular, y eso es fácil de desordenar, especialmente cuando desea rellenar la lista con diferentes tipos de vistas.
RecyclerView amplía este patrón, lo que dificulta el desorden. También es más flexible, lo que facilita el manejo de diferentes diseños, que no son lineales rectos, como una cuadrícula.
RecyclerView se creó como una mejora de ListView, así que sí, puede crear una lista adjunta con el control ListView, pero usar RecyclerView es más fácil ya que:
Reutiliza las celdas mientras se desplaza hacia arriba / abajo : esto es posible implementando View Holder en el adaptador listView, pero era una opción, mientras que en RecycleView es la forma predeterminada de escribir el adaptador.
Desconecta la lista de su contenedor , por lo que puede colocar los elementos de la lista fácilmente en el tiempo de ejecución en los diferentes contenedores (linearLayout, gridLayout) con la configuración de LayoutManager .
Ejemplo:
mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
//or
mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2));
- Animar acciones de listas comunes : las animaciones se desacoplan y se delegan en ItemAnimator .
Hay más sobre RecyclerView, pero creo que estos puntos son los principales.
Entonces, para concluir, RecyclerView es un control más flexible para el manejo de "datos de lista" que sigue patrones de delegación de inquietudes y deja solo una tarea: el reciclaje de artículos.
Respuesta simple: debe usar RecyclerView en una situación en la que desee mostrar muchos elementos, y su número es dinámico. ListView solo debe usarse cuando el número de elementos sea siempre el mismo y se limite al tamaño de la pantalla.
Lo encuentras más difícil porque estás pensando solo con la biblioteca de Android en mente.
Hoy en día, existen muchas opciones que lo ayudan a construir sus propios adaptadores, lo que facilita la creación de listas y cuadrículas de elementos dinámicos que puede seleccionar, reordenar, usar animación, separadores, agregar pies de página, encabezados, etc., etc.
No se asuste y pruebe a RecyclerView; puede comenzar a adorarlo haciendo una lista de los 100 elementos descargados de la web (como las noticias de Facebook) en un ListView y en un RecyclerView, verá la diferencia en el UX (usuario experiencia) cuando intenta desplazarse, probablemente la aplicación de prueba se detendrá antes de que pueda hacerlo.
Te recomiendo revisar estas dos bibliotecas para hacer adaptadores fáciles:
Trabajé un poco con RecyclerView
y todavía prefiero ListView
.
Claro, ambos usan
ViewHolders
, así que esto no es una ventaja.Un
RecyclerView
es más difícil en la codificación.Un
RecyclerView
no contiene un encabezado y pie de página, por lo que es un signo menos.Un
ListView
no requiere hacer un ViewHolder. En los casos en los que desee tener una lista con secciones o subtítulos, sería una buena idea crear elementos independientes (sin ViewHolder), es más fácil y no requiere clases separadas.
Ventajas de RecyclerView sobre listview:
Contiene ViewHolder por defecto.
Animaciones fáciles.
Soporta diseños horizontales, cuadriculados y escalonados.
Ventajas de listView sobre recyclerView:
Fácil de agregar divisor.
Puede usar el adaptador de matriz incorporado para listas simples y sencillas
Soporta Encabezado y pie de página.
Soporta OnItemClickListner.
ListView
es el antecesor de RecyclerView
. Hubo muchas cosas que ListView
no hizo o no hizo bien. Si tuviera que reunir los defectos de ListView
y resolviera el problema abstrayendo los problemas en diferentes dominios, terminaría con algo como la vista de reciclador. Aquí están los puntos principales del problema con ListViews:
No aplicó la reutilización de la
View
para los mismos tipos de elementos (observe uno de los adaptadores que se utilizan en unListView
; si estudia el método getView, verá que nada impide que un programador cree una nueva vista para cada fila, incluso si la hay. pasado a través de la variableconvertView
)No impidió los costosos usos de
findViewById
(incluso si estaba reciclando vistas como se indicó anteriormente, era posible que los desarrolladores llamaran afindViewById
para actualizar el contenido de las vistas secundarias. El propósito principal del patrónViewHolder
enListViews
era almacenar en caché las llamadasfindViewById
Sin embargo, esto solo estaba disponible si lo sabía, ya que no era parte de la plataforma en absoluto)Solo se admite el desplazamiento vertical con vistas en fila (a la vista del reciclador no le importa dónde se colocan las vistas y cómo se mueven, se abstrae en un
LayoutManager
. Por lo tanto, un reciclador puede admitir elListView
tradicional como se muestra arriba, así como cosas comoGridView
, pero no se limita a eso, puede hacer más, pero tiene que hacer el trabajo de programación de programación para que esto ocurra.Las animaciones para agregar / eliminar no fueron un caso de uso que se consideró. Depende completamente de usted cómo hacerlo (compare el RecyclerView. Las clases de adaptadores notifican * las ofertas de métodos v. ListViews para obtener una idea).
En resumen, RecyclerView
es una RecyclerView
más flexible de ListView
, aunque es posible que deba hacer más codificación de su parte.