Descripción de RecyclerView setHasFixedSize

Estoy teniendo problemas para entender setHasFixedSize() . Sé que se utiliza para la optimización cuando el tamaño de RecyclerView no cambia, de los documentos.

¿Qué significa eso? En la mayoría de los casos, un ListView casi siempre tiene un tamaño fijo. ¿En qué casos no sería un tamaño fijo? ¿Significa que el real bienes raíces que ocupa en pantalla crece con el contenido?

Una versión muy simplificada de RecyclerView tiene:

 void onItemsInsertedOrRemoved() { if (hasFixedSize) layoutChildren(); else requestLayout(); } 

Este enlace describe por qué la requestLayout puede ser costosa. Básicamente, siempre que los elementos se insertan, se mueven o se quitan, el tamaño (ancho y alto) de RecyclerView puede cambiar y, a su vez, el tamaño de cualquier otra vista en vista de la jerarquía puede cambiar. Esto es particularmente problemático si los artículos se agregan o se quitan con frecuencia.

Evite los pasos de diseño innecesarios al establecer setHasFixedSize como true cuando agrega o elimina elementos en RecyclerView y no cambia su altura ni su ancho.

El ListView tenía una función similar denominada que creo que refleja información sobre el tamaño de las alturas individuales de elementos de la lista. La documentación de RecyclerView afirma claramente que se está refiriendo al tamaño del propio RecyclerView, no al tamaño de sus elementos.

Desde el comentario de la fuente RecyclerView sobre el método setHasFixedSize ():

  * RecyclerView can perform several optimizations if it can know in advance that changes in * adapter content cannot change the size of the RecyclerView itself. * If your use of RecyclerView falls into this category, set this to true. 

Puede confirmar que setHasFixedSize relaciona con el RecyclerView sí mismo, y no el tamaño de cada artículo adaptado a él.

Ahora puedes usar android:layout_height="wrap_content" en un RecyclerView, que, entre otras cosas, permite a CollapsingToolbarLayout saber que no debe colapsar cuando el RecyclerView está vacío. Esto sólo funciona cuando se utiliza setHasFixedSize(false) en RecylcerView.

Si utiliza setHasFixedSize(true) en RecyclerView, este comportamiento para evitar que CollapsingToolbarLayout se colapse no funciona, aunque el RecyclerView esté realmente vacío.

Si setHasFixedSize estaba relacionado con el tamaño de los elementos, no debería tener ningún efecto cuando el RecyclerView no tiene elementos.

SetHasFixedSize (true) significa que el RecyclerView tiene hijos (items) que tienen anchura y altura fijas. Esto permite que el RecyclerView optimice mejor determinando hacia fuera la altura y el ancho exactos de la lista entera basada en su adaptador.

  • Taps rápidos (clics) en RecyclerView abre varios fragmentos
  • Problema de desplazamiento Infinito Infinito de RecyclerView
  • RecyclerView notifyItemInserted IllegalStateException
  • Obtener el elemento seleccionado y su posición en RecyclerView
  • ¿Es posible mostrar la vista previa de RecyclerView en el editor de planos con orientación horizontal?
  • RecycleView se bloquea en Fragmento porque LayoutManager es NULL
  • Horizontalmente en RecyclerView (con GridLayoutManager)
  • RecyclerVista el espacio entre los elementos que se expanden al desplazarse
  • NotifyDataSetChange no funciona en RecyclerView
  • Cómo obligar a RecyclerView a desplazarse cuando no hay suficientes elementos para llenar la altura de la sceen
  • Decoración de artículos Proguard y RecyclerView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.