webentwicklung-frage-antwort-db.com.de

Wie verwende ich RecyclerView.scrollToPosition (), um die Position an den Anfang der aktuellen Ansicht zu verschieben?

Die RecyclerView.scrollToPosition() ist extrem seltsam . Angenommen, ein RecyclerView heißt "rv".

  1. wenn sich jetzt Element 10 unter dem aktuellen RecyclerView befindet, rufen Sie rv.scrollToPosition(10) auf. Das RecyclerView-Element rollt Element 10 nach unten.

  2. wenn sich jetzt Element 10 in der aktuellen RecyclerView befindet, rufen Sie rv.scrollToPosition(10) auf, es wird kein Bildlauf durchgeführt, es wird nichts unternommen.

  3. wenn sich jetzt Element 10 oben auf der aktuellen RecyclerView befindet, rufen Sie rv.scrollToPosition(10) auf. Das RecyclerView-Element rollt Element 10 nach oben.

Schauen Sie sich dieses Bild an, um das Verständnis zu verbessern  enter image description here

Aber was ich brauche, ist, dass, wenn ich es anrufe, die RecyclerView die vermeintliche Position ganz oben in der aktuellen Ansicht scrollen wird, genau wie in Fall 3. Wie geht das?

19
cryyyyy

Wenn ich die Frage verstehe, möchten Sie zu einer bestimmten Position blättern. Diese Position ist jedoch die Position des Adapters und nicht die Position des RecyclerView.

Sie können dies nur durch LayoutManager erreichen.

Tun Sie etwas wie:

rv.getLayoutManager().scrollToPosition(youPositionInTheAdapter).
37
yugidroid

Der folgende Link könnte Ihr Problem lösen:

https://stackoverflow.com/a/43505830/4849554

Erstellen Sie einfach einen SmoothScroller mit der Einstellung SNAP_TO_START:

RecyclerView.SmoothScroller smoothScroller = new 
LinearSmoothScroller(context) {
   @Override protected int getVerticalSnapPreference() {
       return LinearSmoothScroller.SNAP_TO_START;
   }
};

Jetzt legen Sie die Position fest, zu der Sie scrollen möchten:

smoothScroller.setTargetPosition(position);

Und übergeben Sie diesen SmoothScroller an den LayoutManager:

layoutManager.startSmoothScroll(smoothScroller);
8
Ritesh

Wenn Sie zu einer bestimmten Position blättern möchten und diese Position die Position des Adapters ist, können Sie StaggeredGridLayoutManagerscrollToPosition verwenden.

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

versuche recycler_view.smoothScrollBy(0, 100); hier 0 repräsentiert x-coordinate und 100 repräsentiert y-coordinate Ich habe dies in der vertikalen RecyclerView verwendet, wo ich zur nächsten Position in der vertikalen Liste scrollen wollte und um zur vorherigen Position zu gelangen, die ich einfach ersetzt habe 100 mit -100

0
rajat singh