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?
- Android studio: gradle error de dependencia
- RecyclerView causa problemas al reciclar
- Google Map Lite en CardView
- RecyclerView con GridLayoutManager intentando resolver wrap_content
- Cómo crear una interfaz de usuario como la aplicación Inbox de Google en Android
- AnimateLayoutChanges no funciona con RecyclerView
- Cómo inhabilitar el dibujo de la decoración del artículo de RecyclerView para la duración de las animaciones del artículo
- ¿Mostrar diferente viewType en RecyclerView basado en información en la base de datos?
- Attr / colorError error no encontrado al usar com.android.support:recyclerview-v7:26.0.0-beta2
- Cómo rellenar la imagen dentro de ImageView por la costumbre de la izquierda y la coordenada superior | Androide
- Mostrar datos SQLite en RecyclerView
- SetLayoutManager NullPointException en RecyclerView
- Cómo ocultar la barra de herramientas en un ViewPager al usar Scrolling RecyclerView?
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.
- Android: getSupportActionBar () devuelve siempre null en la biblioteca de ActionBarSherlock
- Actividad de Android sobre la pantalla de bloqueo predeterminada