RecyclerView滚动定位到某一个具体的item或者位置的方法还是很多的。如:
scrollToPosition()
smoothScrollToPosition()
scrollToPositionWithOffset(int, int)
但有时候,也会遇到一些奇葩的问题:
1.目的:RecyclerView滚动定位到某一个item,实际上没有滚动
原因:要滚动到的位置,已经在屏幕里面了,这时候是不滚动的,只有要滚到的位置没有在屏幕上,才会滚动。
解决:计算item距离顶部的距离,使用scrollBy()。
代码:
class RecyclerViewListener extends RecyclerView.OnScrollListener{
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
//在这里进行第二次滚动(最后的100米!)
if (move ){
move = false;
//获取要置顶的项在当前屏幕的位置,mIndex是记录的要置顶项在RecyclerView中的位置
int n = mIndex - mLinearLayoutManager.findFirstVisibleItemPosition();
if ( 0 <= n && n < mRecyclerView.getChildCount()){
//获取要置顶的项顶部离RecyclerView顶部的距离
int top = mRecyclerView.getChildAt(n).getTop();
//最后的移动
mRecyclerView.scrollBy(0, top);
}
}
}
}