在RecyclerView上,我可以使用以下方法突然滚动到所选项目的顶部:

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


但是,这突然将项目移动到顶部位置。我想平稳地移到项目的顶部。

我也尝试过:

recyclerView.smoothScrollToPosition(position);


但是它不能很好地工作,因为它不能将项目移动到所选的顶部位置。它仅滚动列表,直到该位置上的项目可见。

最佳答案

RecyclerView被设计为可扩展的,因此无需执行LayoutManager的子类(如droidev suggested)即可进行滚动。

相反,只需使用首选项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);

09-28 02:29