在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);

10-07 17:25