Как использовать RecyclerView.scrollToPosition(), чтобы переместить позицию в начало текущего представления?
RecyclerView.scrollToPosition()
очень странный. например, предположительно RecyclerView
именем "rv"
.
-
если теперь элемент 10 находится под текущим RecyclerView
, вызовите rv.scrollToPosition(10)
, RecyclerView
прокрутит элемент 10 до дна.
-
если теперь элемент 10 находится в текущем RecyclerView
, вызовите rv.scrollToPosition(10)
, прокрутки не будет, ничего не будет сделано.
-
если теперь элемент 10 находится в верхней части текущего RecyclerView
, вызовите rv.scrollToPosition(10)
, RecyclerView
прокрутит элемент 10 в начало.
Чтобы помочь пониманию, посмотрите на эту картинку ![enter image description here]()
Но что мне нужно, так это то, что всякий раз, когда я вызываю его, RecyclerView
прокручивает предполагаемую позицию в верхнюю часть текущего представления, как в случае 3. Как это сделать?
Ответы
Ответ 1
Если я понимаю вопрос, вы хотите прокрутить до определенной позиции, но это положение - позиция адаптера, а не позиция позиции RecyclerView
.
Вы можете достичь этого только с помощью LayoutManager
.
Сделайте что-то вроде:
rv.getLayoutManager().scrollToPosition(youPositionInTheAdapter).
Ответ 2
Ниже ссылка может решить вашу проблему:
fooobar.com/questions/161294/...
Просто создайте SmoothScroller с предпочтением SNAP_TO_START:
RecyclerView.SmoothScroller smoothScroller = new
LinearSmoothScroller(context) {
@Override protected int getVerticalSnapPreference() {
return LinearSmoothScroller.SNAP_TO_START;
}
};
Теперь вы устанавливаете позицию, в которой вы хотите прокрутить:
smoothScroller.setTargetPosition(position);
И передайте этот SmoothScroller в LayoutManager:
layoutManager.startSmoothScroll(smoothScroller);
Ответ 3
Если вы хотите прокрутить до определенной позиции, и эта позиция является позицией адаптера, то вы можете использовать StaggeredGridLayoutManager
scrollToPosition
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL);
staggeredGridLayoutManager.scrollToPosition(10);
recyclerView.setLayoutManager(staggeredGridLayoutManager);
Ответ 4
попробуйте recycler_view.smoothScrollBy(0, 100);
здесь 0 представляет x-coordinate
а 100 представляет y-coordinate
Я использовал это в вертикальной программе recyclerView, где я хотел прокрутить до следующей позиции в вертикальном списке, а для перехода к предыдущей позиции я просто заменил 100 на -100