La RecyclerView.scrollToPosition()
est extrêmement étrange . Par exemple, supposons un RecyclerView
nommé "rv"
.
si maintenant l'élément 10 est sous le RecyclerView
actuel, appelez rv.scrollToPosition(10)
, le RecyclerView
fera défiler l'élément 10 vers le bas.
si maintenant l'élément 10 est dans la version actuelle de RecyclerView
, appelez rv.scrollToPosition(10)
, il n'y aura pas de défilement, rien ne sera fait.
si maintenant l'élément 10 est au-dessus du RecyclerView
actuel, appelez rv.scrollToPosition(10)
, le RecyclerView
fera défiler l'élément 10 vers le haut.
Pour aider à la compréhension, regardez cette image
Mais ce dont j'ai besoin, c’est que, chaque fois que je l’appelle, le RecyclerView
fera défiler la position supposée vers le haut de la vue actuelle, comme dans le cas 3. Comment faire cela?
Si je comprends la question, vous souhaitez faire défiler jusqu'à une position spécifique, mais cette position correspond à la position de l'adaptateur et non à la position de l'élément RecyclerView
.
Vous ne pouvez y parvenir que par la variable LayoutManager
.
Faites quelque chose comme:
rv.getLayoutManager().scrollToPosition(youPositionInTheAdapter).
Le lien ci-dessous pourrait résoudre votre problème:
https://stackoverflow.com/a/43505830/4849554
Créez simplement un SmoothScroller avec la préférence SNAP_TO_START:
RecyclerView.SmoothScroller smoothScroller = new
LinearSmoothScroller(context) {
@Override protected int getVerticalSnapPreference() {
return LinearSmoothScroller.SNAP_TO_START;
}
};
Maintenant, vous définissez la position où vous voulez faire défiler:
smoothScroller.setTargetPosition(position);
Et transmettez ce SmoothScroller au LayoutManager:
layoutManager.startSmoothScroll(smoothScroller);
Si vous souhaitez faire défiler jusqu'à une position spécifique et que cette position est la position de l'adaptateur, vous pouvez utiliser StaggeredGridLayoutManager
scrollToPosition
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL);
staggeredGridLayoutManager.scrollToPosition(10);
recyclerView.setLayoutManager(staggeredGridLayoutManager);
try recycler_view.smoothScrollBy(0, 100);
here 0 représente x-coordinate
et 100 représente y-coordinate
Je l’ai utilisé dans le recycleur vertical Afficher où je voulais faire défiler jusqu’à la position suivante dans la liste verticale et pour revenir à la position précédente, j’ai simplement remplacé 100 avec -100