最近在开发的时候,遇到了需要通过代码使得RecyclerView能够滑到指定item顶部位置的需求,在查看源码之后,发现RecyclerView已经提供了实现滑动到指定位置的方法,下面是可实现方法:
//平滑滚动
recyclerView.smoothScrollToPosition(position);
//非平滑滚动
recyclerView.scrollToPosition(position);
LinearLayoutManager manager = (LinearLayoutManager)recyclerView.getLayoutManager();
//平滑滚动
manager.scrollToPosition(position)
当然,除了上述方法以外,RecyclerView还有scrollBy、smoothScrollBy这两个方法(RecyclerView不支持scrollTo),可以实现滑动到指定位置,但是使用这三个方法滑动到对应item位置,需要计算item的高度或宽度,实现起来过于复杂。
点击对应按钮调用滑动方法时,有时会无效。这是因为默认情况下,如果item可见,调用滑动到该item的方法时,该方法将不执行滑动。这就说明,调用scrollToPosition或者smoothScrollToPosition并不能保证能够滑到item的顶部。这就尴尬了,这个问题该怎么解决呢?
查阅资料后,发现可以通过下面方法来解决:
LinearLayoutManager manager = (LinearLayoutManager)recyclerView.getLayoutManager();
//此方法可以将某个Item滑动到RecycleView的顶部。
manager.scrollToPositionWithOffset(position, 0);
//如果想滑动到RecycleView的底部,可以通过计算当前item的高度height
manager.scrollToPositionWithOffset(position, -height);
//但是当item的高度超过了RecycleView的高度时,item的高度就会固定不变,这时就滑不到底部,目前暂时的解决办法是,设置一个比较大的值,让其滑到底部。
manager.scrollToPositionWithOffset(position, -100000);