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

参考:RecyclerView scrollToPosition 无效的问题

Android RecyclerView滚动定位

results matching ""

    No results matching ""