¿Determinar cuándo mostrar la barra de desplazamiento rápida del RecyclerView?
He agregado un fast scroller personalizado para recyclerview en mi aplicación. Pero el problema es que el fast scroller sigue mostrándose aunque el contenido de recyclerview sea muy bajo. ¿Alguien puede sugerirme alguna forma de comprobar inicialmente si recyclerview es desplazable o no? Además, necesito comprobar esto dentro de la propia vista personalizada en lugar de en cualquier actividad/fragmento donde se llama.
Nota: Ya intenté obtener el recyclerview ‘s adapter.Itemcount o recyclerview.computeverticalscrollrange en el método onlayout o onsizechanged de mi vista personalizada, pero inicialmente ambos devuelven 0.
Gracias.
davy.ai
Una posible solución a este problema es anular el método
onMeasure()
de la vista personalizada del desplazador rápido para verificar si el RecyclerView es o no desplazable. Aquí se muestra un ejemplo de implementación:En esta implementación, primero creamos un método
setRecyclerView()
que nos permite establecer la instancia de RecyclerView con la que se asociará el desplazador rápido personalizado. Dentro de este método, llamamos a un método auxiliarcheckIfScrollable()
que calcula si el RecyclerView es o no desplazable en función de su cantidad de elementos, la altura del administrador de diseño y el rango de desplazamiento vertical. Luego almacenamos este resultado de cálculo en una variable booleanamIsScrollable
.A continuación, anulamos el método
onMeasure()
de la vista de desplazador rápido personalizada para verificar simRecyclerView
no es nulo y simIsScrollable
es falso. Si ambas condiciones son verdaderas, establecemos la visibilidad de la vista de desplazamiento rápido enGONE
, de lo contrario la establecemos enVISIBLE
.Luego podemos usar esta vista de desplazador rápido personalizada en nuestro archivo de diseño XML de RecyclerView de esta manera:
Y establecer la instancia de RecyclerView en nuestra actividad/fragmento de esta manera:
De esta manera, podemos asegurarnos de que el desplazador rápido personalizado solo se muestre cuando el RecyclerView realmente necesita ser desplazado.