web-dev-qa-db-ja.com

RecyclerView.scrollToPosition()を使用して位置を現在のビューの一番上に移動する方法は?

RecyclerView.scrollToPosition()は非常に奇妙です。たとえば、_"rv"_という名前のRecyclerViewを想定しました。

  1. アイテム10が現在のRecyclerViewの下にある場合、rv.scrollToPosition(10)を呼び出すと、RecyclerViewはアイテム10を下にスクロールします。

  2. アイテム10が現在のRecyclerViewにある場合、rv.scrollToPosition(10)を呼び出して、スクロールは行われず、何も実行されません。

  3. アイテム10が現在のRecyclerViewの一番上にある場合、rv.scrollToPosition(10)を呼び出すと、RecyclerViewはアイテム10を一番上にスクロールします。

理解を助けるために、この写真を見てください enter image description here

しかし、私が必要なのは、それを呼び出すたびに、RecyclerViewがケース3のように想定位置を現在のビューの一番上にスクロールするということです。

25
cryyyyy

質問を理解したら、特定の位置までスクロールしたいが、その位置はアダプターの位置であり、RecyclerViewのアイテムの位置ではない。

これはLayoutManagerを介してのみ実現できます。

次のようなことをしてください:

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

以下のリンクはあなたの問題を解決するかもしれません:

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);
14
Ritesh

特定の位置までスクロールする場合、その位置がアダプターの位置である場合、StaggeredGridLayoutManagerscrollToPositionを使用できます。

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

ここでrecycler_view.smoothScrollBy(0, 100);を試してみてくださいはx-coordinateを表し、1y-coordinateを表します。垂直リストの次の位置と前の位置に来るために、私は単に1-1に置き換えました

0
rajat singh