RecyclerView.scrollToPosition()
は非常に奇妙です。たとえば、_"rv"
_という名前のRecyclerView
を想定しました。
アイテム10が現在のRecyclerView
の下にある場合、rv.scrollToPosition(10)
を呼び出すと、RecyclerView
はアイテム10を下にスクロールします。
アイテム10が現在のRecyclerView
にある場合、rv.scrollToPosition(10)
を呼び出して、スクロールは行われず、何も実行されません。
アイテム10が現在のRecyclerView
の一番上にある場合、rv.scrollToPosition(10)
を呼び出すと、RecyclerView
はアイテム10を一番上にスクロールします。
しかし、私が必要なのは、それを呼び出すたびに、RecyclerView
がケース3のように想定位置を現在のビューの一番上にスクロールするということです。
質問を理解したら、特定の位置までスクロールしたいが、その位置はアダプターの位置であり、RecyclerView
のアイテムの位置ではない。
これはLayoutManager
を介してのみ実現できます。
次のようなことをしてください:
rv.getLayoutManager().scrollToPosition(youPositionInTheAdapter).
以下のリンクはあなたの問題を解決するかもしれません:
https://stackoverflow.com/a/43505830/4849554
設定SNAP_TO_STARTでSmoothScrollerを作成するだけです:
RecyclerView.SmoothScroller smoothScroller = new
LinearSmoothScroller(context) {
@Override protected int getVerticalSnapPreference() {
return LinearSmoothScroller.SNAP_TO_START;
}
};
次に、スクロールする位置を設定します。
smoothScroller.setTargetPosition(position);
そして、そのSmoothScrollerをLayoutManagerに渡します。
layoutManager.startSmoothScroll(smoothScroller);
特定の位置までスクロールする場合、その位置がアダプターの位置である場合、StaggeredGridLayoutManager
scrollToPosition
を使用できます。
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL);
staggeredGridLayoutManager.scrollToPosition(10);
recyclerView.setLayoutManager(staggeredGridLayoutManager);
ここでrecycler_view.smoothScrollBy(0, 100);
を試してみてくださいはx-coordinate
を表し、1はy-coordinate
を表します。垂直リストの次の位置と前の位置に来るために、私は単に1を-1に置き換えました