首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

恢复 RecyclerView 的滚动位置

您可能在开发过程中遇到过这种情况,在 Activity/Fragment 被重新创建后,RecyclerView 丢失了它之前保有的滚动位置信息。...通常这种情况发生的原因是由于异步加载 Adapter 数据,且数据在 RecyclerView 需要进行布局的时候尚未加载完成,导致 RecyclerView 无法恢复到之前的滚动位置。...从  1.2.0-alpha02 版本开始,Jetpack RecyclerView 提供了一个新的 API,可以让 Adapter  在数据加载完成之前阻塞布局行为 ,从而避免丢失滚动位置信息。...接下来我们会介绍如何使用这个新的 API,以及它的工作原理。 恢复至原有滚动位置 有好几种方法可以用来恢复 RecyclerView 至正确的滚动位置,您可能已经在实际项目中用到了这些方法。...如果根据您的项目实际情况无法采用这种方法,那也可以使用其他的方法,只是要么比较复杂 (比如避免在 RecyclerView 中设置 Adapter,但这样又有可能导致像 header 等 item 的显示问题

1.5K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android必知必会 - RecyclerView 恢复上次滚动位置

    记录 RecyclerView 滚动位置并恢复是一个很常见的需求,通常需要精准恢复到上次的位置。...预计会用到 RecyclerView 相关的三个知识点: 监听 RecyclerView 滚动状态 监听 RecyclerView 完成绘制 滚动 RecyclerView 到指定的位置 思路: 在「RecyclerView...完成绘制」时,记录首个元素的偏移量作为基础偏移量;此步非必须流程,根据自己实际情况看是否需要,有些情况此基础偏移量为0,即不存在基础偏移量的问题; 在「监听 RecyclerView 滚动状态」里,滚动结束时...前置知识 监听 RecyclerView 滚动状态 调用 recyclerView.addOnScrollListener(onScrollListener); 来设置 RecyclerView 的滚动监听器...Android: How to get the current X offset of RecyclerView?

    2.1K20

    Android实战经验之如何通过调整RecyclerView的缓存来优化滚动性能

    在 RecyclerView 中,setMaxRecycledViews 方法用于设置 RecycledViewPool 的缓存大小,这是一个重要的性能优化手段。...RecycledViewPool 允许多个 RecyclerView 实例共享一个公共的缓存池,这在有多个 RecyclerView 使用相同视图类型的适配器时非常有用,比如在使用 ViewPager...相反,如果你知道屏幕上同时会有多个相同类型的 ViewHolder,增加池大小可以减少需要重新绑定数据的次数,从而提高滚动性能。...(sharedPool); recyclerView3.setRecycledViewPool(sharedPool); 这样做的好处是,当一个 RecyclerView 滑动到底部,释放出 ViewHolder...总的来说,合理配置 RecycledViewPool 的大小和共享机制,可以显著提高 RecyclerView 的性能和滚动流畅度。 END 点赞转发,让精彩不停歇!

    17110

    RecyclerView notifyItem闪烁的问题

    功能都顺利实现,美中不足的是当前Item闪了一下,QA甚至为此提了Bug,一开始以为是图片加载库的问题,之后随着图片加载库从ImageLoader换成Picaso,又换成Glide,这个Bug一直如影随形...ItemAnimator触发于以下三种事件: 某条数据被插入到数据集合中 从数据集合中移除某条数据 更改数据集合中的某条数据 在Android中默认实现了一个DefaultItemAnimator...notifyItemRemoved(int position) 更新指定位置Item public final void notifyItemChanged(int position) 但是现在的问题就是...与同行们交流了下,也有人遇到同样的问题,解决办法居然是调用notifyDataSetChanged()方法来刷新数据,这样就不会有闪一下的动画了。...但是这样不就失去使用RecyclerView的优势和意义了吗? 最后我是通过重写RecyclerView的动画来解决这一“Bug”。

    3.8K50

    Android隐藏Listview和RecyclerView 滑动边界的阴影,去除滚动条加分隔线等

    1、Listview的属性设置,虽然我现在经常用RecyclerView,很少用Listview了,但是还是顺便写一下,以便巩固一下知识,万一以后需要呢。...overScrollFooter可不写,此处写了是引用的透明色) <ListView android:id="@+id/lv_listview" android:layout_width="match_parent...android:divider="#ff0000" 可以是颜色和图片 android:dividerHeight="1px" 要显示分隔线,分隔线的高度必须大于0 android:headerDividersEnabled..." 设置滚动条不显示,当然ScroollView 也同样有用 2、RecyclerView的属性设置 和ListView一样,记住 android:overScrollMode="never" 即可...,来看看整体 android.support.v7.widget.RecyclerView android:id="@+id/rv_search_one" android:layout_width

    1.1K30

    Android的ListView和RecyclerView的基本用法

    在Android 5.0 版本之前,为了方便的显示多行数据,形如QQ聊天信息主界面,最常用的选择无非是ListView控件,但是ListView控件本身就有很大的局限性和效率问题(相对于RecyclerView...控件)来说,比如说ListView只能竖向滚动显示数据,不能横向滚动显示数据,在一些特殊的需求中,ListView就无能为力了。...在Android5.0版本之后,Android官方推出了一个新的控件:RecyclerView ,完全解耦的设计使得RecyclerView比起ListView灵活了太多,应用的场合也非常广泛。...那么接下来我们来看一下RecyclerView控件的简单用法:我们先用RecyclerView控件来实现上面的功能,你可以选择新建一个Android工程,也可以在上面的ListView控件中的工程中加一个...那么接下来如何显示横向的滚动View呢,其实很简单:只需要在RecyclerViewActivity中加一句代码: linearLayoutManager.setOrientation(

    1.1K50

    Material Design 实战 之第四弹 —— 卡片布局

    至此AppBarLayout已成功解决RecyclerView遮挡Toolbar的问题,但是这里还并没有体现AppBarLayout中应用的MaterialDesign设计理念, 其实,当RecyclerView...其中, scroll表示当RecyclerView向上滚动时,Toolbar会跟着一起向上滚动并实现隐藏; enterAlways表示当RecyclerView向下滚动时,Toolbar会跟着一起向下滚动并重新显示...这里要改动的其实也就这一行代码而已,重新运行一下程序,并向上滚动RecyclerView,效果如图: ?...运行程序可见, 随着我们 向上滚动RecyclerView会Toolbar消失掉; 向下滚动RecyclerView,Toolbar又会重新出现; 滚动到Toolbar的一半时松开手指,Toolbar...又会根据当前滚动的距离情况,做出消失或者重新出现的反应; 这其实也是MaterialDesign中的一项重要设计思想,因为当用户在向上滚动RecyclerView的时候,其注意力肯定是在RecyclerView

    2.1K10

    Android:RecyclerView滑动到边缘时的光晕效果

    相信大家对于RecyclerView 都已经不再陌生,我们都知道RecyclerView等可滑动控件默认的是会有滚动条以及滑动到边缘时的阴影(光晕)效果的,那么怎样去掉这两个默认属性呢,在这里简单的记录一下...1、通过xml文件设置 android:scrollbars=""有三个属性 none:去掉滚动条 horizontal:设置水平的滚动条 vertical:设置垂直的滚动条 2、...(boolean verticalScrollBarEnabled); 设置为true时有相应的滚动条,为false时无相应的滚动条 滚动到边缘的光晕效果 1、通过xml文件设置...里面的内容可以滑动,那么滑到边界后继续滑动会出现弧形光晕;如果recycleview里面的内容不可以滑动,那么滑到边界后继续滑动不会出现弧形光晕 2、通过java代码设置 a.RecyclerView.setOverScrollMode...同时去掉滚动条和默认的光晕效果的完整xml代码为: android.support.v7.widget.RecyclerView android:overScrollMode="never"

    1.2K20

    SwipeRefreshLayout和RecyclerView使用的小问题

    SwipeRefreshLayout是官方提供的下拉刷新控件,在使用过程碰到一些小问题和大家分享下....下面的代码只能监听下拉手势所引发的事件 mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener...,但不会触发上面的监听 //这段代码如果写在onCreate方法中是无效的,因为SwipeRefreshLayout控件还未完全加载,可以使用延迟加载的方法使用下面的代码 mSwipeRefreshLayout.setRefreshing...也不会有下拉刷新的视图 RecyclerView有一点想要分享的是,如果你没有把它和Adapter关联,他会跳过加载,不会实际去初始化这个控件,虽然在布局代码写着 这个和我上面提到SwipeRefreshLayout...提到那个问题放在一起使用,就会产生你下拉不会触发事件的问题.

    1.7K40
    领券