Как получить Scrollposition в Recyclerview / Layoutmanager?

Как получить прокрутку в Recyclerview или Layoutmanager ?

Я могу измерить прокрутку, добавив OnScrollListener , но когда меняется ориентация scrollDy равна 0.

  mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() { int scrollDy = 0; @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { scrollDy += dy; } }); 

Solutions Collecting From Web of "Как получить Scrollposition в Recyclerview / Layoutmanager?"

Вы не можете получить его, потому что он действительно не существует. LayoutManager только знает о представлениях на экране, он не знает взгляды раньше, каков их размер и т. Д.

Число, которое вы можете подсчитать с помощью прослушивателя прокрутки, не является надежным, потому что, если данные будут изменены, RecyclerView выполнит новый расчет макета и не попытается пересчитать реальное смещение (вы получите onScroll(0, 0) если просмотрены просмотры ).

RecyclerView оценивает это значение для полос прокрутки, вы можете использовать те же методы из класса View .

computeHorizontalScrollExtent

computeHorizontalScrollRange

computeHorizontalScrollOffset

Эти методы также имеют свои вертикальные аналоги.

Пожалуйста, см. Принятый ответ, вот как НЕ делать это

Вы можете подклассифицировать Recyclerview:

 public class ScrollRecyclerView extends RecyclerView { public ScrollRecyclerView(Context context) { super(context); } public ScrollRecyclerView(Context context, AttributeSet attrs) { super(context, attrs); } public ScrollRecyclerView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public int getVerticalScrollOffset() { return super.computeVerticalScrollOffset(); } public int getHorizontalScrollOffset() { return super.computeHorizontalScrollOffset(); } } 

Чтобы получить вертикальную прокрутку, которая является Y-Scrollposition, вы можете просто вызвать ((ScrollRecyclerView)recyclerView).getVerticalScrollOffset() Это работает аналогично для Layoutmanager.

Вы должны прочитать scrollDy в

 public void onScrollStateChanged(RecyclerView recyclerView, int newState) 

То вы можете получить положение прокрутки recyclerView'