Necesito saber qué elementos se muestran actualmente en mi RecyclerView. No hay equivalente al OnScrollListener.onScroll(...)
método en ListViews. Intenté trabajar con él View.getGlobalVisibleRect(...)
, pero ese truco es demasiado feo y no siempre funciona.
Alguien alguna idea?
android
android-recyclerview
rekire
fuente
fuente
getItemCount
puede devolver 1 yfindFirstVisibleItemPosition
-1 en la misma llamada.Finalmente, encontré una solución para saber si el elemento actual es visible, desde el evento onBindViewHolder en el adaptador.
La clave es el método isViewPartiallyVisible de LayoutManager.
En su adaptador, puede obtener el LayoutManager de RecyclerView, que obtiene como parámetro del evento onAttachedToRecyclerView .
fuente
para aquellos que tienen que implementar una lógica dentro del adaptador RecyclerView, aún pueden usar el enfoque @ernesto combinado con un en scrollListener para obtener información sobre
what you want
cómo consultar el RecyclerView. Dentro del adaptador tendrás algo como esto:fuente
Puede usar
recyclerView.getChildAt()
para obtener cada elemento secundario visible, y establecer alguna etiquetaconvertview.setTag(index)
en estas vistas en el código del adaptador lo ayudará a relacionarlo con los datos del adaptador.fuente
recyclerView.getChildAt()
, así es como generalmenteRecyclerView
funciona.RecyclerView
intentará mantener solo unas pocas vistas secundarias que están actualmente visibles (es decir, dentro de los límites de la pantalla, no Visibilidad como IDA, INVISIBLE) e intentará reciclar estas vistas cuando el usuario se desplace.Adición :
Las funciones propuestas FindLast ... de posición () no no funcionan correctamente en un escenario con una barra de herramientas, mientras que el colapso de la barra de herramientas se expande.
Parece que la vista del reciclador tiene una altura fija, y mientras la barra de herramientas se expande, el reciclador se mueve hacia abajo, parcialmente fuera de la pantalla. Como consecuencia, los resultados de las funciones propuestas son demasiado altos. Ejemplo: se dice que el último elemento visible es el # 9, pero de hecho, el elemento # 7 es el último que está en la pantalla.
Este comportamiento también es la razón por la cual mi vista a menudo no pudo desplazarse a la posición correcta, es decir, scrollToPosition () no funcionó correctamente (finalmente colapsé la barra de herramientas mediante programación).
fuente
Los siguientes
Linear / Grid LayoutManager
métodos se pueden utilizar para verificar qué elementos sonvisible
y si desea realizar un seguimiento
is item visible on screen
de algún umbral, puede consultar el siguiente blog.https://proandroiddev.com/detecting-list-items-perceived-by-user-8f164dfb1d05
fuente
Para
StaggeredGridLayoutManager
hacer esto:Y para obtener vistas visibles del elemento:
Recuerde verificar si está vacío.
fuente
viewsIds
es una matriz y puede estar vacía.