关于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