(急)求教gridlayoutmanager的recyclerview自动滚动到指定位置的问题

此recyclerview头部加了两个headerview一下是尝试的三个方法,
方法一就是会被tab覆盖一点,但是滚动的位置是正确的
方法一加方法二做二次滚动,隔1秒就反弹到第二个header 的位置
方法三的话不会被覆盖,但是滚动位置不准确
设置位置为0就在顶部,1就在第二个header的位置
2就在第二个item的位置,直接过度过第一个item不知道为啥
设置位置3,4和2都是同样的效果

图片说明
图片说明

            if (isReload && mPage == 1 && count > 3) {
                isReload = false;
                try {
                    if (firstVisiblePosition > 0) {//方法一:此方法会被tab覆盖一部分
                        mRecyclerView.smoothScrollToPosition(2);
                    } else {
                        mRecyclerView.smoothScrollToPosition(4);
                    }

// if (mRecyclerView.getLayoutManager() instanceof GridLayoutManager) {//方法三此方法总是多滚动一行
// if (firstVisiblePosition > 0) {
// ((GridLayoutManager) mRecyclerView.getLayoutManager()).scrollToPositionWithOffset(2, (int) (40 * App.mDensity));
// } else {
// ((GridLayoutManager) mRecyclerView.getLayoutManager()).scrollToPositionWithOffset(3, (int) (20 * App.mDensity));
// }
// }
readyMove = true;
} catch (Exception e) {
e.printStackTrace();
}
}

// try {//方法二:由于二次跳转回造成反弹,暂时不管遮住的tab高度部分
// if (newState == RecyclerView.SCROLL_STATE_IDLE && readyMove) {
// readyMove = false;
//
// if (firstVisiblePosition > 0) {
// mRecyclerView.smoothScrollBy(0, -(int) (37 * App.mDensity));
// } else {
// mRecyclerView.smoothScrollBy(0, -(int) (29 * App.mDensity));
// }
// }
// } catch (Exception e) {
// e.printStackTrace();
// }

recyclerView.smoothScrollToPosition(position);
这个行吗,直接滚动到特定的item

来张效果图啊 还有你要实现什么功能

后来问了我朋友才知道,不是滚动不准,是因为recyclerview夺取焦点产生的回弹问题,在父控件添加request焦点那两个方法就行
mRecyclerView.getLayoutManager()).scrollToPositionWithOffset可以用,很准