关于recyclerview滑向指定位置,肯定会想到scrollToPosition和smoothScrollToPosition两个方法。

源码分析scrollToPosition,最后会调用view的requestLayout,requestLayout是一个非常霸道的方法,会把UI线程全部锁死直到自己完成才会再次解锁。所以这个方法经常调用会出现卡顿。

而smoothScrollToPosition会回调滑动监听的方法,会平滑到你想显示的项。但是只要那一项现在看得到,那它就罢工了。

关于使用场景,有时候想要从列表底部直接返回顶部,这时候发现smoothScrollToPosition效果并不那么理想,甚至不能滑到第一条,这时候简单粗暴的scrollToPosition就比较合适了,并且此项会是第一个可见item。

那有时候横向的recyclerview需要左右切换滑动,这时候就需要平缓的smoothScrollToPosition了。

By LiYing

转载于:https://www.cnblogs.com/widgetbox/p/11176390.html

原文链接: http://www.cnblogs.com/widgetbox/p/11176390.html 原来我们用listview的时候,插入数据了以后直接通过adapter的notifydatasetchanged就OK了。然后recycleview比listview更好的地方,就是它更灵活,控制性更强,我们想怎么摆弄就怎么摆弄。这本主要讲述 RecyclerView 的三种方法。 1、notifyItemInserted(int position) 2、notifyItemRangeChanged(int positionStart, int itemCount) 3、notifyItemRemoved(int position) 1、notifyItemInserted(int po 相信大家在项目中使用 RecyclerView 时,经常会遇到这样的需求: 将 RecyclerView 滑动到指定位置,或者检索 RecyclerView 的某一项(各个项的高度不确定),然后定位滚动这到一项,将它显示。 下面就讲解4种 RecyclerView 定位滚动的方式及具体效果演示。 scrollBy 使用post方法:有时候,在调用 scrollToPosition 方法之前, RecyclerView 还没有被完全刷新。在这种情况下,建议使用post方法将要滚动到的位置移动到UI线程队列的末尾。确保 RecyclerView 有足够的高度:如果 RecyclerView 没有足够的高度,它将无法滚动。因此,你需要确保 RecyclerView 有足够的高度,以便能够滚动。使用上述的方法,在大多数情况下可以解决 RecyclerView scrollToPosition 无效的问题。 首先说明下我遇到这个问题的背景吧。 Android Tv开发中常常会遇到 RecyclerView 初始化时焦点位置不为0的情况,比如,推荐一个节目集,希望给用户展示上次观看的集数,这时我们的初始化焦点位置大于0,焦点view可能在当前屏幕内,也可能不在当前屏幕内,如果当焦点view不在当前屏幕内,主动获取焦点则会失败,我的解决方法是让焦点view滚动到屏幕可见范围内,滚动结束再获取焦点。这时就需要... 1.在 recyclerView 中, scrollToPosition 不会触发 scrollListener,而 smoothScrollToPosition 会触发 scrollListener 。源码分析可参考 2.监听 smoothScrollToPosition 滑动动画停止时,的例子: private void scrollToPosition (int position){ recyclerView .removeOnScrollListener(onScrollListener); 把不在屏幕的 Item 移动到屏幕上,已显示的 Item 不会移动。 scrollToPosition WithOffset 把 Item 移动到可见 Item 的第一项,即使它已经在可见 Item 之中。 offset 参数,表示 Item 移动到第一项后跟 RecyclerView 上边界或下边界之间的距离(默认是 0) 今天做东西,要达到的效果是:recycleview设置的是GONE,我需要在它显示的时候能滑动到指定位置。 在网上查了很多东西,基本讲解的都是怎么滑动到列表不显示的item,或者是滑动到指定的位置。 我这里,主要是验证,从GONE到VISABLE的过程中,如何滑动到我们想要的位置。 scrollToPosition 这个方法是好用的,并且会触发onScrolled方法一次。然后我们可以处理... 一、LayoutManager 1、LayoutManager. scrollToPosition WithOffset ((LinearLayoutManager)m RecyclerView .getLayoutManager()). scrollToPosition WithOffset(toPosition, 0); 1、m RecyclerView RecyclerView 控件 2、toPosition : 指定移动位置 方式二: RecyclerView 1、 RecyclerView .scroll