The RecyclerView.scrollToPosition()
is extremely strange.
for example, supposed a RecyclerView
named "rv"
.
if now item 10 is under the current
RecyclerView
, callrv.scrollToPosition(10)
, theRecyclerView
will scroll item 10 to bottom.if now item 10 is in the current
RecyclerView
, callrv.scrollToPosition(10)
, there won't be any scrolling, nothing will be done.if now item 10 is on the top of the current
RecyclerView
, callrv.scrollToPosition(10)
, theRecyclerView
will scroll item 10 to top.
To help understanding, look at this picture
But what i need is that, whenever i call it, the RecyclerView
will scroll the supposed position to the top of current view just like case 3. How to do that?
try
recycler_view.smoothScrollBy(0, 100);
here 0 representsx-coordinate
and 100 representsy-coordinate
I used this in vertical recyclerView where I wanted to scroll to next position in the vertical list and for coming to the previous position I simply replaced 100 with -100If I understand the question, you want to scroll to a specific position but that position is the adapter's position and not the
RecyclerView
's item position.You can only achieve this through the
LayoutManager
.Do something like:
Below link might solve your problem:
https://stackoverflow.com/a/43505830/4849554
Just create a SmoothScroller with the preference SNAP_TO_START:
Now you set the position where you want to scroll to:
And pass that SmoothScroller to the LayoutManager:
If you want to scroll to a specific position and that position is the adapter's position, then you can use
StaggeredGridLayoutManager
scrollToPosition