1. ホーム
  2. android

[解決済み] RecyclerView - ある位置でアイテムの一番上までスムーズにスクロールするには?

2022-04-28 08:09:51

質問

RecyclerViewで、選択した項目の一番上に突然スクロールできるようになりました。

((LinearLayoutManager) recyclerView.getLayoutManager()).scrollToPositionWithOffset(position, 0);

しかし、この 突然 は、項目を一番上の位置に移動させます。アイテムを一番上に移動させたい スルスル .

もやってみた。

recyclerView.smoothScrollToPosition(position);

が、これは選択された位置の項目を一番上に移動させないので、うまく動作しません。単に、その位置にあるアイテムが見えるようになるまでリストをスクロールするだけです。

解決するには?

RecyclerView は拡張可能な設計になっているので LayoutManager (として droidevが提案した ) を使って、スクロールを行うだけです。

代わりに、単に 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);