J'ai besoin de savoir quels éléments sont actuellement affichés dans ma RecyclerView. Il n'y a pas d'équivalent à la OnScrollListener.onScroll(...)
méthode sur ListViews. J'ai essayé de travailler avec View.getGlobalVisibleRect(...)
, mais ce hack est trop moche et ne fonctionne pas toujours aussi.
Quelqu'un a des idées?
android
android-recyclerview
rekire
la source
la source
getItemCount
peut renvoyer 1 etfindFirstVisibleItemPosition
-1 sur le même appel.Enfin, j'ai trouvé une solution pour savoir si l'élément actuel est visible, à partir de l'événement onBindViewHolder dans l'adaptateur.
La clé est la méthode isViewPartiallyVisible de LayoutManager.
Dans votre adaptateur, vous pouvez obtenir le LayoutManager à partir de RecyclerView, que vous obtenez comme paramètre à partir du événement onAttachedToRecyclerView .
la source
pour ceux qui ont une logique à implémenter à l'intérieur de l'adaptateur RecyclerView, vous pouvez toujours utiliser l'approche @ernesto combinée avec un scrollListener pour obtenir
what you want
lorsque le RecyclerView est consulté. À l'intérieur de l'adaptateur, vous aurez quelque chose comme ceci:la source
Vous pouvez utiliser
recyclerView.getChildAt()
pour obtenir chaque enfant visible, et définir une baliseconvertview.setTag(index)
sur cette vue dans le code de l'adaptateur vous aidera à le relier aux données de l'adaptateur.la source
recyclerView.getChildAt()
, c'est ainsi que celaRecyclerView
fonctionne généralement .RecyclerView
essaiera de ne conserver que quelques vues enfant qui sont actuellement visibles (c'est-à-dire dans les limites de l'écran, pas la visibilité en tant que disparu, INVISIBLE) et essaiera de recycler ces vues lorsque l'utilisateur défile.Addendum :
Les fonctions proposées findLast ... Position () ne fonctionnent pas correctement dans un scénario avec une barre d'outils repliée pendant que la barre d'outils est développée.
Il semble que la vue du recycleur ait une hauteur fixe, et tandis que la barre d'outils est développée, le recycleur est déplacé vers le bas, partiellement hors de l'écran. En conséquence, les résultats des fonctions proposées sont trop élevés. Exemple: le dernier élément visible est dit # 9, mais en fait, l'élément # 7 est le dernier qui est à l'écran.
Ce comportement est également la raison pour laquelle ma vue échouait souvent à la position correcte, c'est-à-dire que scrollToPosition () ne fonctionnait pas correctement (j'ai finalement réduit la barre d'outils par programme).
la source
Les
Linear / Grid LayoutManager
méthodes suivantes peuvent être utilisées pour vérifier quels éléments sontvisible
et si vous souhaitez suivre
is item visible on screen
un certain seuil, vous pouvez vous référer au blog suivant.https://proandroiddev.com/detecting-list-items-perceived-by-user-8f164dfb1d05
la source
Pour
StaggeredGridLayoutManager
cela:Et pour obtenir des vues d'objets visibles:
N'oubliez pas de vérifier s'il est vide.
la source
viewsIds
est un tableau, et il peut être vide.