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

如何在屏幕旋转时保持recyclerView的滚动位置

在屏幕旋转时保持RecyclerView的滚动位置需要以下步骤:

  1. 在Activity的onSaveInstanceState()方法中保存当前RecyclerView的滚动位置。可以通过调用getLayoutManager().onSaveInstanceState()方法获取当前LayoutManager的状态,并将其保存到Bundle中。
  2. 在Activity的onCreate()方法中恢复RecyclerView的滚动位置。在恢复布局之后,可以通过调用getLayoutManager().onRestoreInstanceState()方法,并传入之前保存的状态来恢复RecyclerView的滚动位置。

以下是示例代码:

代码语言:txt
复制
public class MyActivity extends AppCompatActivity {
    private RecyclerView recyclerView;
    private RecyclerView.LayoutManager layoutManager;
    private RecyclerView.Adapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        recyclerView = findViewById(R.id.recyclerView);

        // 设置布局管理器
        layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);

        // 设置适配器
        adapter = new MyAdapter(data);
        recyclerView.setAdapter(adapter);

        // 恢复RecyclerView的滚动位置
        if (savedInstanceState != null) {
            Parcelable state = savedInstanceState.getParcelable("recycler_state");
            recyclerView.getLayoutManager().onRestoreInstanceState(state);
        }
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        
        // 保存RecyclerView的滚动位置
        Parcelable state = recyclerView.getLayoutManager().onSaveInstanceState();
        outState.putParcelable("recycler_state", state);
    }
}

在上面的代码中,我们将RecyclerView的滚动位置保存到Bundle中,并在恢复布局后将其恢复到RecyclerView中。

推荐使用腾讯云的产品腾讯云云服务器(CVM)作为云计算平台。腾讯云云服务器(CVM)是一种灵活可扩展的云计算基础设施,为用户提供高性能的虚拟机实例,可以满足各种不同规模和需求的应用场景。

腾讯云云服务器产品介绍链接地址:https://cloud.tencent.com/product/cvm

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

旋转画廊,看自定义RecyclerView.LayoutManager

一、简介 前段时间需要一个旋转木马效果用于展示图片,于是第一间在github上找了一圈,找了一个还不错控件,但是使用起来有点麻烦,始终觉得很不爽,所以寻思着自己做一个轮子。...想起旋转画廊效果不是和横向滚动列表非常相似吗?那么是否可以利用RecycleView实现呢?...当dx>0,控件向右滚动,即 接着,调用先前已经写好布局方法layoutItems(),对Item进行重新布局。 最后,返回实际滑动距离。...: //拖拽滚动 break; case RecyclerView.SCROLL_STATE_SETTLING:...接着,在getChildDrawingOrder()中,childCount为当前已经显示Item数量,i为item位置旋转画廊中,中间位置优先级是最高,两边item随着递减。

2.8K51

Android 知乎广告效果实现代码

问题: 1.图片如何在范围内(单个item范围)上下移动,窗户一般,后面的图是可以动,但是窗户是固定。 2.图片移动时机肯定和recycleView滚动监听item有关,用哪些方法?...2.recycleView Item滚动监听,刚好前段时间在仿写微博视频自动播放接触过,recycleView提供了一些譬如FindFirstVisibleItemPosition(当前屏幕第一个item...~(或者说相对屏幕显示范围)~,上面代码中范围计算~(参数r,b)~其实就是 整个屏幕除开状态栏导航栏以外范围~(recycleView范围)~。...位置 和 广告有效移动距离 @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled...RecyclerView.ViewHolder viewHolder = recyclerView.findViewHolderForAdapterPosition(i); //找出屏幕广告

1.3K40
  • 已中招!Android 基础面试常常吊死在这几个问题上……

    10、面试官:当旋转屏幕,Activity如何响应? 11、面试官:你是如何做到旋转屏幕防止数据重新加载和重置? 12、面试官:说一下AsyncTasks和线程他们区别!...应聘者:旋转屏幕,当前 Activity 实例将被破坏,并以新方向创建Activity新实例。旋转屏幕,由于屏幕旋转时会重新创建布局,将首先调用onCreate() 方法。...第三波 11、面试官:你是如何做到旋转屏幕防止数据重新加载和重置?...这就是为什么 RecyclerView 会利用以下事实:滚动,新行出现在屏幕上,而旧行消失在屏幕上。代替为每个新行创建新视图,而是通过将新数据绑定到旧视图来对其进行回收和重用! 应聘者:我学到了!...ViewHolder模式:Recyclerview实现了ViewHolders模式,但在ListView 中不是必需RecyclerView滚动回收并重用单元格。

    2K20

    写给初学者Jetpack Compose教程,Lazy Layout

    因此最好设计方案就是,当用户向下滚动列表,我们就认为用户不再需要和Fab按钮交互,此时将按钮进行隐藏。 下面具体看一下如何在Compose中实现这种效果。...现在可以运行一下程序看看效果了: 正如我们所期待那样,当A元素在屏幕上可见时候,Fab按钮也是可见。当A元素滑出了屏幕,Fab按钮也会随之消失。...每当你认为自己需要用到嵌套滚动,我觉得都应该先暂停一下,想想是不是有其他替代方案,ConcatAdapter等。...其中,VerticalScrollable()函数是垂直方向滚动列表,它在第一行位置又嵌套了HorizontalScrollable()函数。...相比于RecyclerView,基于ComposeLazy Layout在这一点上确实非常劣势,因为RecyclerView就完全不会有重组困扰,只需要offset一下子项位置就可以了。

    50310

    RecyclerView预加载!

    一种实现方案是预加载,即在一页数据还未看完就请求下一页数据,让用户感觉列表内容是无穷。...监听列表滚动状态 第一个想到方案是监听列表滚动状态,当列表快滚动到底部执行预加载,RecyclerView.OnScrollListener提供了两个回调: public class RecyclerView...dx, int dy){} } } 在onScrolled()可以拿到LayoutManager,它提供了很多和表项位置有关方法: // 为 RecyclerView 新增扩展方法,用于监听预加载事件...就测出 bug:当快速滚动列表onPreload()没有执行,当慢慢滚动列表onPrelaod()会执行多次。...唯一需要担心是,列表滚动到底部触发了一次预加载后,又往回滚动(阈值位表项滚出屏幕),假设预加载迟迟没有完成,此时再次滚动到底部,移出屏幕阈值位表项需要重新执行`onBindViewHolder(),

    2.4K00

    项目需求讨论- 自定义滚轮(第二波新实现)

    而且如果你手指快速滑动,不停滚动,你就会滑到顶部位置。因为我们是ScrollView 最后选中哪一项,才让它滚动到中间相应那一项。 那有些人可能会说,那我就不只弄这几组。...那现在就是我们要让他滚动到一定距离,自动调整自己位置,来正好显示某个Item项,而不会出现某个Item在界面上显示一半。...---- 滚动后调整距离让RecyclerView 滚到特定position位置: 我简单介绍,就只分二种情况来谈下(正好滑到一个标准距离,让Item正好完全显示这种情况我就去除了): 顶部Item...这时候大家也知道,应该是让当前屏幕内获取到first Item 滚动出界面,所以大家一想就说获取第一个ItemPosition值,然后调用RecyclerView.smoothScrollToPosition...但是结果是不会滚动,原来这个方法当我们Position + 1已经出现在屏幕上了。不管是不是第一个,不管处于屏幕哪个位置,这个RecyclerView就不会滚动。我忍不住又一句 WHF!!。

    1.1K20

    recycleview优化_recyclerview原理

    ,它假设所有都改变了,会将每一个ViewHolder设置成无效并且放到缓存池Pool中,如果我们仅是把屏幕第四条itemView移到第六条位置屏幕上所有itemView都会重新layout一遍,...这个机制会导致一个问题,启动应用之后,在屏幕可见范围内,如果只有一张卡片可见,当滚动 候,RecyclerView找不到可以重用view了,它将创建一个新,因此在滑动到第二个feed时候就会有一定延时...具体实现方式是:在 RecyclerView 开始一个滚动new Runnable对象,根据 layout manager 和滚动方向预取即将进入视野条目,可以同时取出一个或多个条目,例如在使用...onViewAttachedFromWindow(): RecyclerViewitem进入屏幕回调 onViewDetachedFromWindow():RecyclerViewitem移出屏幕回调...2)每次打开界面都是定位在RecyclerView屏幕顶端,列表上面的布局都被顶上去了 RecyclerView抢占了焦点,自动滚动导致.

    3.9K21

    Floating Action Button-Android M新控件

    浮动操作按钮代表一个屏幕之内最基本额操作。关于FAB按钮更多信息和使用案例请参考谷歌官方设计规范。 运行效果 ?...实际上只需要指定一个布局文件,就可以看到效果了,只不过是这时候FAB是固定在屏幕指定位置,而无法随之滚动,不着急,下面会介绍如何设置成可滚动FAB 属性介绍 FAB 默认使用应用主题中设置浮起色作为按键背景...设置 FAB 按下景深(默认是 12dp)。...调整按钮类型 浮动操作按钮有两种大小:默认,这应该是最常用情况,以及mini,这应该只用于衔接屏幕其他元素。 可以把FAB按钮类型调整为“正常”或者“mini” ......(false); 监听滚动事件 我们可以监听所关联list滚动事件,以管理FAB状态: FloatingActionButton fab = (FloatingActionButton) root.findViewById

    1.4K40

    Android RecyclerView八个必会面试技巧

    在实际应用中,适配器设计影响着整个列表性能和扩展性。 ItemDecoration: 用于在Item之间添加装饰,分隔线或空白间距。...RecyclerView绘制流程 问题: 能详细描述RecyclerView绘制流程吗?从数据源到最终显示在屏幕过程?...scrollVerticallyBy、scrollHorizontallyBy: 处理垂直和水平方向上滚动事件,根据滚动距离调整ItemView位置。...当Item被滑出屏幕,ViewHolder会被复用,而不是重新创建。 优势包括: 减少内存消耗: 通过复用ViewHolder,减少了View创建和销毁,降低了内存开销。...参考简答: ViewHolder模式: RecyclerView使用ViewHolder模式来缓存视图。当ItemView滑出屏幕,对应ViewHolder会被缓存,而不是立即销毁。

    26720

    Android:让你明明白白使用RecyclerView——SnapHelper详解

    简介 RecyclerView在24.2.0版本中新增了SnapHelper这个辅助类,用于辅助RecyclerView滚动结束将Item对齐到某个位置。...SnapHelper是一个抽象类,官方提供了一个LinearSnapHelper子类,可以让RecyclerView滚动停止相应Item停留中间位置。...Fling操作从手指离开屏幕瞬间被触发,在滚动停止结束。...要进行fling操作需要最小速率, //只有超过该速率,ItemView才会有足够动力在手指离开屏幕继续滚动下去 int minFlingVelocity = mRecyclerView.getMinFlingVelocity...在snapFromFling()方法中会创建一个SmoothScroller,并且根据速率计算出滚动停止位置,将该位置设置给SmoothScroller并启动滚动

    5.8K40

    一个Demo学会用Android兼容包新控件

    RecyclerView结合实现下拉刷新,以及RecyclerView数据适配器RecyclerView.Adapter用法,还有RecyclerView中item点击事件实现方法; 卡片式CardView...本例中,TabLayout在界面滚动,随着Toolbar逐渐隐藏,将占据Toolbar位置, 达到节省屏幕空间,界面动画效果目的。...scroll: 所有想滚动屏幕view都需要设置这个flag- 没有设置这个flagview将被固定在屏幕顶部。...enterAlwaysCollapsed: 当你视图已经设置minHeight属性又使用此标志,你视图只能以最小高度进入,只有当滚动视图到达顶部才扩大到完整高度。...exitUntilCollapsed: 当视图会在滚动,它一直滚动到设置minHeight完全隐藏。

    1.5K40

    ItemTouchHelper 实现交互动画

    01.拖拽需要实现功能 需要实现拖拽功能如下所示 长按item后拖动,与其他item交换位置 按住item右面的图标后拖动,与其他item交换位置 左滑item变透明并缩小,超出屏幕后,其他item补上...上下拖动与其他item进行位置交换 ItemTouchHelper.Callback本身不具备将两个item互换位置功能,但RecyclerView可以,我们可以在item拖动时候把当前item与另一个...左右滑出屏幕其他item补上 只要在item滑出屏幕,将对应数据删掉,再调用RecyclerViewnotifyItemRemoved()方法刷新布局即可。...* 动作标识分:dragFlags和swipeFlags * dragFlags:列表滚动方向动作标识(竖直列表就是上和下,水平列表就是左和右) * wipeFlags...:与列表滚动方向垂直动作标识(竖直列表就是左和右,水平列表就是上和下) * * 思路:如果你不想上下拖动,可以将 dragFlags = 0 * 如果你不想左右滑动

    3.9K20

    Android无限循环RecyclerView完美实现方案

    背景 项目中要实现横向列表无限循环滚动,自然而然想到了RecyclerView,但我们常用RecyclerView是不支持无限循环滚动,所以就需要一些办法让它能够无限循环。...方法里对position参数取余运算,拿到position对应真实数据索引,然后对itemView绑定数据 最后,在初始化RecyclerView时候,让其滑动到指定位置 Integer.MAX_VALUE...标注5处 layoutDecorated() 方法会对 itemView 进行布局排版,这里可以看出来,我们是根据宽依次往父容器右边排下去,直到下一个 itemView顶点位置超过了RecyclerView...里item,然后根据 itemView 顶点位置进行判断,移除不可见item。...至此,一个可以实现左右无限循环LayoutManager就实现了,调用方式跟通常我们用RrcyclerView没有任何区别,只需要给 RecyclerView 设置 LayoutManager 指定我们

    4.8K20

    再也不用担心面试官问RecycleView了

    1)首先说下RecyclerView缓存结构: Recyclerview有四级缓存,分别是mAttachedScrap(屏幕内),mCacheViews(屏幕外),mViewCacheExtension...(屏幕外),保存最近移出屏幕ViewHolder,包含数据和position信息,复用时必须是相同位置ViewHolder才能复用,应用场景在那些需要来回滑动列表中,当往回滑动,能直接复用ViewHolder...所以「完整缓存流程」是: 保存缓存流程: 插入或是删除itemView,先把屏幕ViewHolder保存至AttachedScrap中 滑动屏幕时候,先消失itemview会保存到CacheView...这是因为RecyclerView默认是setNestedScrollingEnabled(true),这个方法含义是支持嵌套滚动。...也就是说当它嵌套在NestedScrollView中,默认会随着NestedScrollView滚动滚动,放弃了自己滚动。所以给我们感觉就是滞留、卡顿。

    1.5K20

    淘宝开源库VLayout实践

    FloatLayoutHelper: 浮动布局,可以固定显示在屏幕上,但用户可以拖拽其位置 ColumnLayoutHelper: 栏格布局,都布局在一排,可以配置不同列之间宽度比值 SingleLayoutHelper...scrollFixLayoutHelper = new ScrollFixLayoutHelper(15,15); //show_always:总是显示 //show_on_enter:当页面滚动到这个视图位置时候...:与FixLayoutHelper行为一致,固定在某个位置; SHOW_ON_ENTER:默认不显示视图,当页面滚动到这个视图位置时候,才显示; SHOW_ON_LEAVE:默认不显示视图,当页面滚出这个视图位置时候显示...; 这里效果不明显,等集合所有布局之后大家就可以看很直观效果 FloatLayoutHelper: 浮动布局,可以固定显示在屏幕上,但用户可以拖拽其位置,代码如下: public static FixLayoutAdapter...img6.gif 其中setDefaultLocation()使用来设置他初始位置,setAlignType(表示吸边基准位置,默认左上角,有四个取值,分别是TOP_LEFT, TOP_RIGHT

    1.8K20

    教你简单实现RecyclerView自动滚动

    RecyclerView内容过多,超出屏幕时候,需要让它自己滚动展示数据,尤其是某些Android设备处于高处,或是不可被触摸点击,这样情况下,让其自己滚动展示数据尤为重要了 自动滚动方案有很多种...,目前比较常见又最简单一种是:继承至RecyclerView,并实现runnable方法,每间隔10ms(delayTime)就去执行scrollby(x,y)方法,其中delayTime和x,y值决定了滚动速度...= null private var running //是否正在滚动 = false private var canRun //是否可以自动滚动,根据数据是否超出屏幕来决定...} } 上面代码实现了最基本滚动功能,但有时候Adnroid设备可以触摸的话,而当前recyclerview正在滚动,又去滑动它,那就会造成界面错乱,数据错乱了,所以还需要重写拦截onTouchEvent...方法,当触摸到recyclerview时候,即在ACTION_DOWN,停止滚动线程,在ACTION_UP、ACTION_CANCEL再开启线程。

    94240

    Android 基于RecyclerView实现歌词滚动自定义控件

    本文介绍了Android 基于RecyclerView实现歌词滚动自定义控件,分享给大家,具体如下: 先来几张效果图: ? ?...((;′⌒`)) 接下来说一下实现原理: 该控件分为以下几个部分: 歌词自动滚动 歌词颜色字体变化 触碰屏幕歌词不滚动,高亮显示,离开自动移动到当前歌词位置 触碰屏幕中间线条出现以及显示该歌词时间...public void run() { } } 对于点击屏幕就重写 onTouchEvent() 方法, 在 down 事件中 ,设置变量让 Runable () 事件中不滚动...而对于歌词在离开屏幕一段时间后自动回到该位置。同样,还是需要使用 smoothScrollBy() 方法移动。而移动多少呢?这是个问题。...这个要分为四种情况: 第一种: 当前歌词在屏幕之外:由于我是打算将歌词移动到屏幕第四个位置。 那么我就需要找到屏幕第一个位置,还有当前显示是哪一句歌词。

    1.7K10
    领券