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初始化完成执行任务
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容