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