web-dev-qa-db-fra.com

Comment utiliser RecyclerView.scrollToPosition () pour déplacer la position en haut de la vue actuelle?

La RecyclerView.scrollToPosition() est extrêmement étrange . Par exemple, supposons un RecyclerView nommé "rv".

  1. 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.

  2. 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.

  3. 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  enter image description here

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?

19
cryyyyy

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).
37
yugidroid

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);
8
Ritesh

Si vous souhaitez faire défiler jusqu'à une position spécifique et que cette position est la position de l'adaptateur, vous pouvez utiliser StaggeredGridLayoutManagerscrollToPosition

   StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL);
   staggeredGridLayoutManager.scrollToPosition(10);
   recyclerView.setLayoutManager(staggeredGridLayoutManager);
1
Zeeshan

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

0
rajat singh