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

垂直RecyclerView内部的水平RecyclerViews丢失位置/状态

垂直RecyclerView内部的水平RecyclerViews丢失位置/状态是指在一个垂直滚动的RecyclerView中,每个Item都包含一个水平滚动的RecyclerView,当垂直RecyclerView滚动时,水平RecyclerView可能会出现位置或状态丢失的问题。

这个问题通常是由于RecyclerView的回收复用机制导致的。当垂直RecyclerView滚动时,屏幕上的Item会被回收并复用给新的Item,而复用的Item可能会保留之前的滚动位置和状态。当复用的Item被重新绑定数据时,如果没有正确处理水平RecyclerView的位置和状态,就会导致位置或状态丢失的问题。

为了解决这个问题,可以在垂直RecyclerView的Adapter中对水平RecyclerView进行正确的位置和状态保存与恢复操作。具体步骤如下:

  1. 在垂直RecyclerView的Adapter中,为每个Item的水平RecyclerView设置一个唯一的标识符,可以使用Item的位置索引或者其他唯一标识符。
  2. 在垂直RecyclerView的Adapter中,重写onViewRecycled()方法,在该方法中保存水平RecyclerView的滚动位置和状态。可以使用getScrollX()getScrollY()方法获取当前滚动位置,使用自定义的变量保存其他状态信息。
  3. 在垂直RecyclerView的Adapter中,重写onBindViewHolder()方法,在该方法中恢复水平RecyclerView的滚动位置和状态。可以使用scrollTo()方法将水平RecyclerView滚动到之前保存的位置,使用保存的状态信息恢复其他状态。

这样,当垂直RecyclerView滚动时,每个Item的水平RecyclerView都会正确地保存和恢复位置和状态,避免丢失的问题。

对于腾讯云相关产品,可以使用腾讯云的云存储服务 COS(对象存储)来存储RecyclerView中的图片或其他媒体文件。腾讯云COS提供了高可靠性、高可用性的对象存储服务,适用于各种场景,包括网站托管、移动应用、大数据分析、备份与归档等。您可以通过以下链接了解更多关于腾讯云COS的信息:

腾讯云COS产品介绍:https://cloud.tencent.com/product/cos

腾讯云COS开发者文档:https://cloud.tencent.com/document/product/436

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

相关·内容

【Android应用开发】RecycleView API 翻译 (文档翻译)

状态 有用信息, 如 目标滚动位置 和 View 组件 焦点. class RecyclerView.ViewCacheExtension ViewCacheExtension 是一个帮助类,... listener) 添加一个监听器, 作用是当滚动状态 或者 位置发生变化时得到相应通知. void clearOnChildAttachStateChangeListeners...() 之前 设置 关于通知任意滚动状态位置 变化 监听器, 该方法用于移除这些次要监听器. int computeHorizontalScrollExtent...在水平范围中, 计算水平滚动条水平偏移量. int computeHorizontalScrollRange() 计算 横向滚动条 在水平方向上滚动范围....() 在垂直方向范围中, 计算垂直方向上 垂直滚动条 翻越偏移量. int computeVerticalScrollRange()

1.3K40

RecyclerView复用机制

RecyclerView复用机制 概述 RecyclerView是Android业务开发非常常用组件。我们知道它有复用,并且设计优雅。可能看过源码同学还知道,它有几层复用。...所以,笔者试图通过本文,讲清楚以下几个问题: RecyclerView 缓存原理 RecyclerView 每层缓存作用及参数影响 我们应该如何使用 RecyclerView RecyclerView...所以我们通常用它来提升某个特定positionItemView回看性能。比如,我们有某个ItemView,界面构建很废时,处在RecyclerView固定位置中,且界面不需要刷新。...也就是说,它保持着onCreateView后ViewHolder最初状态。...为什么RecyclerView要设计这四级缓存,每一级起到了什么作用。然后那些优化方式,为什么要当作外部API来提供,而不是直接在内部帮我们优化,限制又是什么?

1.2K20

Android——RecyclerView自定义OnScrollListener实现下拉刷新监听,上拉加载更多功能

:滑动状态改变时方法会被调用,第一个参数recyclerView是当前列表,第二个参数newState是滑动状态(SCROLL_STATE_IDLE为无滑动,SCROLL_STATE_SETTLING...为滑动中); onScrolled:滑动状态改变时方法会被调用,第一个参数recyclerView是当前列表,xy为水平垂直方向滑动坐标值,所以垂直方向,当y值>0时,说明列表正在向上滑动,<=0时列表向下滑动或停止...,可知,结合这两个方法可判断出当前是下滑还是上滑动作,覆写方法,结合加入可视区域第一条和最后一条item位置,可以判断出下拉、上拉动作,因此完全可以自定义RecyclerView.OnScrollListener...实现,关键思路: 下拉:可视区域第一条item位置==0 && 非上滑动作; 上拉:可视区域最后条item位置==列表item总数-1 && 上滑动作; 接口:定义回调接口,内部定义下拉刷新,及上拉加载更多两个方法...} int fristItemPosition = manager.findFirstCompletelyVisibleItemPosition();//第一个显示位置

3.2K30

RecyclerView 源码分析-开编

如果一个对象有大量是与非状态需要表示,通常我们会使用BitMask 技术来节省内存,在 >Java 中,一个 byte 类型,有 8 位(bit),可以表达 8 个不同状态,而 int 类型,则有...再比如Long类型,有64位,则可以表达64中状态。一般情况下使用一个>Long已经足够我们使用了。但如果有不设上限状态需要我们表示呢?...在ChildHelper里有一个静>>态内部类Bucket 可以看到,Bucket是一个链表结构,当index大于64时候,它便会去下一个Bucket去寻找,所以,Bucket可以不设上限表示状态...CallBack 内部类CallBack其实就是RecyclerView来实现其方法 Recycler类 也是一个内部类,是管理回收(scrapped)或者分离(detached)内部管理类。...其中有一个RecyclerViewPool内部类 RecycledViewPool lets you share Views between multiple RecyclerViews.

1.1K20

关于RecyclerView你知道不知道都在这了(上)前言目录正文

,从注释上来看,该方法是用于指定 item 在该行或该列上具体哪个位置,比如将GridLayoutManager设置为3行水平样式,那么第1个卡位就是在第一列 0 位置,第2个卡位 1,一次类推。...当设定为竖直方向时,以水平方向为顺序,寻找水平方向上最靠近顶端位置来布局 item,所以并不是说一定按照第 1 列、第 2 列、第 3 列这种顺序来布局。...SCROLL_STATE_SETTLING:惯性滑动时状态(这是我理解) 在手机应用上和 Tv 应用上,这些状态回调还是有所区别的,所以分开来说一下: 手机应用: 手机上 RecyclerView...5.5 setPreserveFocusAfterLayout() 这个还没搞清它应用场景是什么,注释是说,当在进行布局工作时,有些时候,会由于 item 状态发生改变,或者由于动画等原因,导致焦点丢失...还有一点就是,RecyclerView 内部其实自定义了一个 LayoutParams,作用于它直接子 View。

3.1K60

嵌套滑动通用解决方案--NestedScrollingParent2

* consumed[0] 水平消耗距离,consumed[1] 垂直消耗距离 好让子view做出相应调整 * @param type 滑动类型,...产生嵌套滑动view * @param dx 水平方向嵌套滑动子View想要变化距离 * @param dy 垂直方向嵌套滑动子View想要变化距离...* @param dxConsumed 水平方向嵌套滑动子View滑动距离(消耗距离) * @param dyConsumed 垂直方向嵌套滑动子View滑动距离(消耗距离...) * @param dxUnconsumed 水平方向嵌套滑动子View未滑动距离(未消耗距离) * @param dyUnconsumed 垂直方向嵌套滑动子View未滑动距离...然后根据tabLayout位置以及滑动方向,决定是滑动外层RecyclerView还是滑内层,以及滑动多少。

3.6K31

【Android从零单排系列二十六】《Android视图控件——ScrollView》

它对于需要显示较长文本、图片或其他可滚动内容界面非常有用。与RecyclerView相比,ScrollView更适用于静态、不需要复用子项情况。...在ScrollView中,只能包含一个直接子视图(ViewGroup),通常是一个垂直方向线性布局或相对布局。如果需要水平滚动效果,可以使用HorizontalScrollView作为替代。...-- 在这里添加您内容视图 --> 在ScrollView内部添加内容视图。在ScrollView标签内部,可以放置各种UI组件来展示要滚动内容。...android:scrollbars:定义滚动条显示方式。可选值有"none"(不显示)、"vertical"(只显示垂直滚动条)和"horizontal"(只显示水平滚动条)。...常见方法: scrollTo(int x, int y):将ScrollView滚动到指定位置,参数x和y分别代表目标位置水平垂直偏移量。

34920

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

记录 RecyclerView 滚动位置并恢复是一个很常见需求,通常需要精准恢复到上次位置。...预计会用到 RecyclerView 相关三个知识点: 监听 RecyclerView 滚动状态 监听 RecyclerView 完成绘制 滚动 RecyclerView 到指定位置 思路: 在「RecyclerView...完成绘制」时,记录首个元素偏移量作为基础偏移量;此步非必须流程,根据自己实际情况看是否需要,有些情况此基础偏移量为0,即不存在基础偏移量问题; 在「监听 RecyclerView 滚动状态」里,滚动结束时...,记录最左侧元素坐标和偏移量; 再次打开当前页面时,检查是否存在偏移量信息记录,有则进行位置恢复,即「滚动 RecyclerView 到指定位置」。...前置知识 监听 RecyclerView 滚动状态 调用 recyclerView.addOnScrollListener(onScrollListener); 来设置 RecyclerView 滚动监听器

2K20

Android:流式布局实现总结

1 什么是流式布局/标签 说白了呢,就是一种参差不齐视图,比如: 水平流式布局 ? 垂直流式布局 ? 多条目类型流式布局 ? 2实现方式有哪些?...通常情况下,与ChipGroup配套使用是Chip——也就是ChipGroup中条目。Chip本身具有选中和点击状态,也可以加入图片,可以修改文本(颜色、字号、字体等)。...initStaggerLayout(true, RecyclerView.VERTICAL)                toast("垂直Stagger")            }            ...       android:background="@color/c_1b89d8"        android:padding="@dimen/dp10"        android:text="垂直...       android:background="@color/c_1b89d8"        android:padding="@dimen/dp10"        android:text="水平

3.8K20

使用 RecyclerView 实现 Gallery 画廊效果,并控制 Item 停留位置

其实我们可以控制其 Item 停留位置,并使其实现画廊效果。如果大家熟悉 SnapHelper 的话,估计大家就都会了。...效果如下: 居中实现方式 使用 SnapHelper 配合 RecyclerView 实现控制 Item 位置居中显示,非常简单,官方默认提供 LinearSnapHelper 就是居中,我们直接使用即可..., View targetView) 当拖拽或滑动结束时会回调该方法,返回一个out = int[2],out[0]x轴,out[1] y轴,这就是我们需要修改位置偏移量 View findSnapView...layoutManager, View targetView) { int[] out = new int[2]; //判断支持水平滚动,修改水平方向位置,是修改out[0]值 if (layoutManager.canScrollHorizontally...(rv); 最后,其实垂直方向也可以实现哦,大家可以尝试一下垂直方向使用方式是不是非常简单。

3.3K70

【Android 事件分发】ItemTouchHelper 源码分析 ( OnItemTouchListener 事件监听器源码分析 二 )

/ 垂直 方向上条目组件 宽度 / 高度 ; 如果拖动比例超过在 水平 / 垂直 方向上条目组件 宽度 / 高度 乘以 threshold 值 , 则拖动判定成功 , 执行响应方法 ; 如果拖动比例没有超过该值..., 说明没有触发拖动操作 , 直接返回 ; // 在该判断中 , 使用了 threshold 系数 乘以 水平 / 垂直 方向上条目组件宽度 ; // 如果拖动比例超过在...水平 / 垂直 方向上条目组件 宽度 / 高度 乘以 threshold 值 // 则拖动判定成功 , 执行响应方法 // 如果拖动比例没有超过该值 , 说明没有触发拖动操作..., 初始位置 与 最后一次事件位置 偏移值 ..../ 垂直 方向上条目组件宽度 ; // 如果拖动比例超过在 水平 / 垂直 方向上条目组件 宽度 / 高度 乘以 threshold 值 // 则拖动判定成功

1.1K20

ItemTouchHelper 实现交互动画

上下拖动时与其他item进行位置交换 ItemTouchHelper.Callback本身不具备将两个item互换位置功能,但RecyclerView可以,我们可以在item拖动时候把当前item与另一个...item数据位置交换,再调用RecyclerViewnotifyItemMoved()方法刷新布局,同时,因为RecyclerView自带item动画,就可以完成上面的交互效果。...:与列表滚动方向垂直动作标识(如竖直列表就是左和右,水平列表就是上和下) * * 思路:如果你不想上下拖动,可以将 dragFlags = 0 * 如果你不想左右滑动...item 各种状态 ItemTouchHelper itemTouchHelper = new ItemTouchHelper(callback); try{ //关联recyclerView...控件滑动到顶部和底部 02.RecyclerView嵌套RecyclerView 条目自动上滚Bug 03.ScrollView嵌套RecyclerView滑动冲突 04.ViewPager嵌套水平RecyclerView

3.8K20

RecyclerView】 三、RecyclerView 布局 ( 线性布局管理器 LinearLayoutManager )

文章目录 一、线性布局 1、线性布局管理器 LinearLayoutManager 2、垂直不翻转代码示例 3、水平翻转代码示例 二、完整代码示例 三、RecyclerView 相关资料 本篇博客主要讨论设置不同布局管理器..., 以及不同布局管理器参数设置 , 基础用法参考 【RecyclerView】 一、RecyclerView 最基本用法 ( 添加支持库 | 设置布局文件 | 自定义适配器 ) , 以及 RecyclerView...RecyclerView 适配器代码 : 【RecyclerView】 一、RecyclerView 最基本用法 ( 添加支持库 | 设置布局文件 | 自定义适配器 ) 三、自定义适配器 , 本篇博客中使用适配器代码都是该代码...; 初始化布局管理器及设置布局管理器 : 这里创建 LinearLayoutManager 是标准垂直方向列表 , 不翻转元素 ; //1 ....横向 , 翻转元素 线性布局示例 : 翻转后 , RecyclerView 加载后 , 会自动跳转到最后一位位置 ; //1 .

67400

Android开发笔记(一百七十二)第二代翻页视图ViewPager2

与ViewPager相比,ViewPager2支持更丰富界面特效,包括但不限于下列几点: 1、不但支持水平方向翻页,还支持垂直方向翻页; 2、支持RecyclerView.Adapter,允许调用适配器对象...其中ViewPager2.ORIENTATION_HORIZONTAL表示水平方向,ViewPager2.ORIENTATION_VERTICAL表示垂直方向。...注意RecyclerView与ViewPager2拥有各自AndroidX库,故需修改模块build.gradle,在dependencies节点内部补充以下两行依赖配置:     implementation...如果把翻页方向改为垂直方向,那么翻页之时界面如下图所示。 ? 以上效果图看起来仅仅多了垂直翻页,稍等片刻给它加上其它特效。..., List goodsList) {         super(fa);         mGoodsList = goodsList;     }     // 创建指定位置碎片

2.2K30

RecyclerView】 五、RecyclerView 布局 ( 瀑布流 | 交错网格局管理器 StaggeredGridLayoutManager )

相关资料 本篇博客主要讨论设置不同布局管理器 , 以及不同布局管理器参数设置 , 基础用法参考 【RecyclerView】 一、RecyclerView 最基本用法 ( 添加支持库 | 设置布局文件...如果当前方向是垂直方向, 该参数设置是行数. 如果当前方向是水平方向, 该参数设置是列数. ② int orientation : 布局方向....当方向是 RecyclerView.VERTICAL 垂直方向时 , 网格元素排列顺序是逐行排列 , 先将第一行排满 , 然后将第二行排满 , int spanCount 参数设置是每行元素个数 ;...参数设置是每列元素个数 ; ( 古代人写字顺序 ) 构造函数原型 : /** * 创建瀑布流网格布局管理器 * * @param spanCount 如果当前方向是垂直方向...如果当前方向是水平方向, 该参数设置是列数. * @param orientation 布局方向.

1.2K00

恢复 RecyclerView 滚动位置

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

1.5K10
领券