RecyclerView 滑动到指定位置

看一下RecyclerView有哪些滑动的Api

  1. recyclerView.scrollTo(int x, int y) ,虽然提供,但是没有实现,不支持;
  2. recyclerView.scrollBy(int x, int y),必须设置了LayoutManager,否则报错,因为内部调用了LayoutManager.scrollHorizontallyBy(int dx, Recycler recycler, State state)或者scrollVerticallyBy
  3. recyclerView.scrollToPosition(int position)同上,调用的 LayoutManager.scrollToPosition(int position)
  4. 上面这些都对应个smoothXX,是通过Scroller来做的动画,也都可以通过LayoutManager来调用,而LayoutManager是通过SmoothScroller来实现的;
  5. LayoutManager的startSmoothScroll(SmoothScroller smoothScroller)方法,可以指定子View的对齐方式,比如:SNAP_TO_END,子View对齐到父View的bottom或者right;

绑定Adapter后就要滚动到指定位置

这个不像ListView可以直接指定selectPosition,并且直接调用上那些方法不起作用;
暂时没有找到其他方法来实现,包括监听View创建,View测量,View状态,都不容易实现;

  recyclerView.post(new Runnable() {
            @Override
            public void run() {
                recyclerView.scrollToPosition(position);
            }
  });

原理

通过view.post来调用,向主线程Looper中添加一个message,当执行到这个message时,一定是View加载完成了,所以这个时候再滑动,一定是可以的。
利用这个特点,我们可以实现很多功能:

  • 监控主线程的耗时操作
  • View初始化的监听,View创建到底花费多长时间
  • 在异步线程中更新View,因为Looper是主线程的
  • View初始化完成执行任务

你可能感兴趣的:(RecyclerView 滑动到指定位置)