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

在另一个片段内创建的ViewPager中保存片段内的RecyclerView状态

,可以通过以下步骤实现:

  1. 首先,在片段内的RecyclerView所在的片段类中,创建一个方法用于保存RecyclerView的状态。例如,可以在片段类中添加以下方法:
代码语言:txt
复制
public Parcelable saveRecyclerViewState() {
    if (recyclerView != null) {
        return recyclerView.getLayoutManager().onSaveInstanceState();
    }
    return null;
}
  1. 在创建ViewPager的父片段或活动类中,创建一个方法用于保存和恢复RecyclerView的状态。例如,可以在父片段或活动类中添加以下方法:
代码语言:txt
复制
private SparseArray<Parcelable> recyclerViewStates = new SparseArray<>();

public void saveRecyclerViewState(int position, Parcelable state) {
    recyclerViewStates.put(position, state);
}

public Parcelable restoreRecyclerViewState(int position) {
    Parcelable state = recyclerViewStates.get(position);
    recyclerViewStates.remove(position);
    return state;
}
  1. 在父片段或活动类中,监听ViewPager的页面切换事件,并在切换页面时保存和恢复RecyclerView的状态。例如,可以在父片段或活动类中添加以下代码:
代码语言:txt
复制
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    }

    @Override
    public void onPageSelected(int position) {
        // 保存当前页面的RecyclerView状态
        int currentPosition = viewPager.getCurrentItem();
        Parcelable state = fragmentAdapter.saveRecyclerViewState();
        saveRecyclerViewState(currentPosition, state);

        // 恢复切换后页面的RecyclerView状态
        Parcelable newState = restoreRecyclerViewState(position);
        if (newState != null) {
            fragmentAdapter.restoreRecyclerViewState(newState);
        }
    }

    @Override
    public void onPageScrollStateChanged(int state) {
    }
});
  1. 最后,在ViewPager的适配器中,添加保存和恢复RecyclerView状态的方法。例如,可以在适配器中添加以下方法:
代码语言:txt
复制
public Parcelable saveRecyclerViewState() {
    if (currentFragment != null) {
        return currentFragment.saveRecyclerViewState();
    }
    return null;
}

public void restoreRecyclerViewState(Parcelable state) {
    if (currentFragment != null) {
        currentFragment.restoreRecyclerViewState(state);
    }
}

通过以上步骤,可以在另一个片段内创建的ViewPager中保存片段内的RecyclerView状态。在切换ViewPager页面时,会保存当前页面的RecyclerView状态,并在切换后的页面恢复RecyclerView的状态。这样可以确保在切换页面时,RecyclerView的滚动位置和数据都能正确保存和恢复。

推荐的腾讯云相关产品:腾讯云移动推送(https://cloud.tencent.com/product/tpns)

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

相关·内容

Android入门教程 | Fragment 基础概念

在此情况下,需在列表布局中创建包含 RecyclerView 的片段。...可以通过两种方式向 Activity 布局添加片段(以下为代码片段,并非完整代码)。 静态方式 在 Activity 的布局文件内声明片段。 在本例中,您可以将片段当作视图来为其指定布局属性。...也可将每个事务保存到由 Activity 管理的返回栈内,从而让用户能够回退片段更改(类似于回退 Activity)。...如要了解保留界面状态的更多信息,请参阅保存界面状态。 对于 Activity 生命周期与片段生命周期而言,二者最显著的差异是在其各自返回栈中的存储方式。...不过 ViewPager 为了防止滑动出现卡顿,有一个缓存机制,默认情况下 ViewPager 会创建并缓存当前页面左右两边的页面(如Fragment)。

3.5K40

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

京东首页 可见,在向上滑动页面时,当tabLayout滑动到顶部时,外层RecyclerView停止滑动,此时tabLayout即为吸顶状态,接着会 滑动ViewPager中的内层RecyclerView...答案是否定的,效果如下: ? 按分析的view结构直接实现 可见,在tabLayout是吸顶状态,无法继续滑动内层RecyclerView(抬起手指继续滑也不行)。(点击查看相关代码) 那么该咋办呢?...2.3 NestedScrollingParent2LayoutImpl3的实现原理 代码如下 /** * 处理RecyclerView 套viewPager, viewPager内的fragment...:此时还获取不到ViewPager内fragment的RecyclerView,需要在加载ViewPager后 fragment可见时 传入 } private RecyclerView...套viewPager, viewPager内的fragment中 也有RecyclerView,处理外层、内层 RecyclerView的嵌套滑动问题,类似淘宝、京东首页。

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

    notifyItem***方法,从而动态刷新某项视图; 3、除了当前页,也支持展示左右两页的部分区域; 4、支持在翻页过程中展示自定义的切换动画; 虽然ViewPager2增加了这么棒的功能,但它用起来非常简单...注意RecyclerView与ViewPager2拥有各自的AndroidX库,故需修改模块的build.gradle,在dependencies节点内部补充以下两行依赖配置:     implementation...适配器的代码片段示例如下: public class MobileRecyclerAdapter extends RecyclerView.AdapterRecyclerView.ViewHolder...先在测试页面的Java代码中补充下面几行:     // ViewPager2支持展示左右两页的部分区域     RecyclerView cv_content = (RecyclerView) vp2...撤销刚加的边缘特效代码,再给测试页面的Java代码中补充下面几行:     // ViewPager2支持在翻页时展示切换动画     // 创建页面转换器,用于计算切换动画的各项参数     ViewPager2

    2.3K30

    android gallery当前view变大,GitHub – hutcwpGalleryViewDemo: 实现画廊效果(中间放大两边缩小)无限循环向左滑向右滑,Viewpager和Recycl

    :28.0.0’ 一个是ViewPager所在包,另一个是RecyclerView所在包 RecyclerView实现GalleryView效果可(伪无限)无限左滑右滑 先上效果图 要点: 在有限的数据里面...的试图回收机制 在有限的数据里面,实现无限个Item 在RecyclerView.Adapter的方法中: @Override public int getItemCount() { return...RecyclingPagerAdapter继承这个PagerAdapter就可以实现类似RecyclerView的回收机制了 在有限的数据,实现循环 在 ViewPager 的首尾多添加一个 View...void onPageScrollStateChanged(int state) { } }); 在ViewPagerAdapter的方法中: 实现起来较为简单。...android:clipChildren的意思:是否限制子View在其范围内 需要在父节点和ViewPager界面设置android:clipChildren属性 setPageTransformer(

    2.4K20

    ViewPager中Fragment状态保存的哪些事

    重新创建后 View状态(RecyclerView滚动位置) 的变化,如下所示: 因为默认缓存为 n(1)+2 ,即当我们滑动到 item=3 时,1 页面此时已被销毁。...但当我们重新切换到 1 时,可以发现,Fragment1 中 RecyclerView 的 滚动位置 没有变化,所以可以证明 Fragment 的状态的确是被还原了。 那这是怎么做的呢?...的状态信息,并且以下标的方式进行了保存,当我们在滑动 ViewPager 时,其会加载并初始化指定 position 所对应 Fragment ,并将缓存的 Fragment 的状态信息 set 进去...Fragment部分 通过上面的方式,我们可以简单的知道 ViewPager 是如何帮我们进行状态还原与保存,那 Fragment 到底是在什么时候去使用这个状态呢?...key 存到了一个list集合中,然后在调用 getItem() 初始化Fragment时,其会将之前保存的状态重新 set 给我们的 Fragment 实例。

    1.4K20

    recycleview的优化_recyclerview原理

    ViewHolder> mAttachedScrap 主要用在插入或是删除itemView时,先把屏幕内的ViewHolder保存至AttachedScrap中,作用在LayoutManager中,...缓存过程: 在滑动过程中,会先滑动的itemView保存到CacheView中,CacheView大小默认是2,如果超过了最大容量,则按FIFO,将队列头部的itemView出队,保存至缓存池RecyclerViewPool...这个机制会导致一个问题,启动应用之后,在屏幕可见范围内,如果只有一张卡片可见,当滚动的时 候,RecyclerView找不到可以重用的view了,它将创建一个新的,因此在滑动到第二个feed的时候就会有一定的延时...在 25.1 版本中,预取操作被分为单独的创建/绑定操作,比对整组条目操作更容易被纳入 UI 线程的空隙中。...7.2 复用RecycledViewPool 在TabLayout+ViewPager+RecyclerView的场景中,当多个RecyclerView有相同的item布局结构时,多个RecyclerView

    4.3K21

    ViewPager 2 使用讲解「建议收藏」

    之前早有耳闻 Google 为我们提供新的控件来替换老旧的 ViewPager 进而解决一些不好解决的bug问题,巴拉巴拉一大堆,就是前因后果啥的…相信读者已经在“张鸿洋”大神、“郭霖”大神或者是其他Android...this); viewPager2.setAdapter(adapter); } } Activity 内的代码就没什么不同了和之前一样的两步走,初始化控件,设置适配器。...); } } Activity 内的viewPager2.setOrientation(ViewPager2.ORIENTATION_VERTICAL);可以实现 xml 内的android:orientation...每个 Fragment 内的布局更加简洁这里不再陈述 b、 逻辑 Adapter 内逻辑 package com.example.viewpager2.withRadioGroup; import androidx.annotation.NonNull...c、 google 官方 bug 仔细观察这个案例 ,你会发现在ViewPager 2滑动的时候 TabLayout 的下划线切换了,但是 TabLayout 的字体颜色没有随之改变,但是在点击T abLayout

    1.3K30

    《移动互联网技术》第五章 界面开发: 掌握Activity的基本概念,Activity的堆栈管理和生命周期

    在系统中,活动将不断经历从创建到销毁的周期运行。了解活动如何生存,以及活动整个生命周期的状态变迁,能更清楚地知道如何去实现活动。...在堆栈中,只有栈顶的活动可以操作,也就是说一个任务中只有一个活动处于运行状态,其他的活动都转入到后台暂停运行,Android系统会保存这些活动的状态,以便它们在转入前台时可以恢复运行。...处于暂停状态的活动仍然是存活着的,系统通常不会回收这种活动。 (3) 停止状态 当活动被压到返回栈的下面,在屏幕上完全不可见,这个时候活动就处于停止状态。系统会保存活动的状态和成员变量。...如果用户启动其他活动,比如对话框式的活动,原来的活动就转为暂停状态。转移到暂停状态时,可以在onPause()函数中释放一些不用的资源,保存一些关键的数据。...TableRow表示表格内的行,行内每一个元素算作一列。每加入一个TableRow就表示在表格中添加了一行,在TableRow中每加入一个控件,就表示在该行中加入了一列。

    22310

    仿抖音上下滑动分页视频

    3.在fragment中处理视频的初始化,播放和销毁逻辑等逻辑。 4.由于一个页面需要创建一个fragment,注意性能和滑动流畅度这块需要分析和探讨。...很多人会以为 Fragment 在 onResume 的时候就是可见的,而 ViewPager 中的 Fragment 就是个反例,尤其是多个 ViewPager 嵌套时,会同时有多个父 Fragment...3.在recyclerView对应的adapter中,在onCreateViewHolder初始化视频操作,同时当onViewRecycled时,销毁视频资源。...,我们就看看什么时候释放视频的资源,第二步中的三种状态,去打印getChildCount()的日志,你会发现getChildCount()在SCROLL_STATE_DRAGGING会为1,SCROLL_STATE_SETTLING...接着,不管是在recyclerView还是ViewPager中,当页面处于不可见被销毁或者view被回收的阶段,这个时候需要把视频资源销毁,尽量视频播放功能封装起来,然后在页面不同状态调用方法即可。

    5.9K20

    ViewPager2+Fragment操作笔记

    ViewPager2底层基于RecyclerView实现,因此可以获得RecyclerView带来的诸多收益: 抛弃传统的PagerAdapter,统一了Adapter的API; 横向、竖向布局都可以实现自由滑动...他们偶尔会搭配TabLayout一起使用,相关代码直接阅读或者运行 ViewPager2官网Samples 即可,这里不做重复的讲解。 下面主要讲一下在使用过程中遇到的问题~!...(SourceFile:29) 在开发过程中遇到问题,需要在构造FragmentStateAdapter的时候对Fragment的状态做判断isAdded()。...更新数据的时候遇到的崩溃: Fragment already added 重写getItemId方法,该方法返回的值与数据有关而不是与数据在列表中的索引有关。...使用:ViewPager2官网Samples DiffUtil 局部更新 DiffUtil和它的差量算法 总结 本文主要介绍了ViewPager2配合Fragment的使用方法以及在使用过程中需要注意的问题

    4.3K31

    用 CoordinatorLayout 处理滚动

    第二种是额外创建一个嵌入 CoordinatorLayout 中的 RecyclerView。...下述教程和代码示例可以帮助你实现这些更加复杂的效果: CustomBottomSheetBehavior Sample - 描述了在底部表滑动时三种状态来回切换。...Flipboard/bottomsheet - 另一个在官方方案发布前非常流行的可选方案。 ThreePhasesBottomSheet - 利用第三方库来创建一个多阶底部表的示例代码。...例如,在一个下拉刷新的例子中,这个属性应该放在包含了 RecyclerView 的 SwipeRefreshLayout 中而不是第二层以下的后代中。...在一个使用了内部有 items 列表的 ViewPager 的 fragment 和一个父 activity 之间使用协调时,你想像这里描述的那样在ViewPager 上添加 app:layout_behavior

    4.8K92

    Android MVVM框架搭建(四)RecyclerVIew + ViewPager2 + BaseQuickAdapter

    显示数据 九、源码 前言   在日常的开发中,最常用于展示数据的形式就是列表,你会看到各种各样的列表,比如图片列表、视频列表,联系人列表,而在RecyclerView出来之前列表的开发是使用ListView...,而现在绝大多数开发者都使用RecyclerVIew了,优势就不说了,都已经用了这么多年了,那么RecyclerView在MVVM中要怎么使用呢?...版本升级迁移   在AppDatabase中增加如下代码,用于数据库版本的升级迁移,这里我是新增了一个迁移对象,构建迁移对象的版本,从1到2,然后执行一段SQL语句,该语句用于创建一个新的表。...(); 下面在MainRepository中增加一个保存网络热门壁纸数据到本地的方法,代码如下: /** * 保存热门壁纸数据 */ private void saveWallPaper...因为ViewPager2可以在setAdapter时直接设置RecyclerView.Adapter,很方便,因此这里同样需要一个适配器,这里的适配器我不打算用原生的来写。 2.

    2.1K20

    移动开发作业一

    在每个 Fragment 类中,定义要显示的内容和布局,例如 RecyclerView 列表。 在 Fragment 中处理与该选项卡相关的数据和功能,如加载数据、处理点击事件等。 3....XML 布局: 为每个 Fragment 创建对应的 XML 布局文件,用于定义该选项卡页面的界面元素。 在某一个 XML 布局中使用 RecyclerView 控件,用于显示列表效果。 4....RecyclerView: 在每个 Fragment 中,使用 RecyclerView 控件来显示列表数据。 创建一个适配器类,用于将数据与 RecyclerView 绑定。...图片 该适配器充当RecyclerView和消息数据之间的桥梁,负责加载布局、填充数据,并将数据正确显示在屏幕上。...图片 View对象view用于加载片段的布局,通过inflater.inflate方法将布局文件R.layout.wetalks填充到片段中。这个布局包含一个RecyclerView控件。

    23630

    【ViewPager2避坑系列】瞬间暴增数个Fragment

    作者:HitenDev 链接:https://juejin.im/post/5ce15668f265da1bbf68ed52 1 前言 最近我在关注ViewPager2的使用,期间一直基于官方的Demo...3 初步原因MATCH_PARENT计算失效 ViewPager2目前只支持ItemView的布局参数是MATCH_PARENT,就是填充父布局的效果;由于ViewPager2是基于RecyclerView....onMeasure()优先计算mRecyclerView的尺寸,所以关注的重点转移到RecyclerView.onMeasure()上,RecyclerView对子View的计算和布局逻辑在LayoutManager...在竖屏时,widthMeasureMode一直都是1073741824(MATCH_PARENT),但是横屏状态下,widthMeasureMode在0(UNSPECIFIED)和MATCH_PARENT...=UNSPECIFIED,结果返回传入的size,在FrameLayout中是maxWidth和maxHeight,而并不是parent给予的specSize; 4.3 为何整体会测量两遍 这是由于FrameLayout

    7.7K30

    Android MVVM框架搭建(四)RecyclerVIew + ViewPager2 + BaseQuickAdapter

    显示数据 九、源码 前言   在日常的开发中,最常用于展示数据的形式就是列表,你会看到各种各样的列表,比如图片列表、视频列表,联系人列表,而在RecyclerView出来之前列表的开发是使用ListView...,而现在绝大多数开发者都使用RecyclerVIew了,优势就不说了,都已经用了这么多年了,那么RecyclerView在MVVM中要怎么使用呢?...版本升级迁移   在AppDatabase中增加如下代码,用于数据库版本的升级迁移,这里我是新增了一个迁移对象,构建迁移对象的版本,从1到2,然后执行一段SQL语句,该语句用于创建一个新的表。...(); 下面在MainRepository中增加一个保存网络热门壁纸数据到本地的方法,代码如下: /** * 保存热门壁纸数据 */ private void saveWallPaper...因为ViewPager2可以在setAdapter时直接设置RecyclerView.Adapter,很方便,因此这里同样需要一个适配器,这里的适配器我不打算用原生的来写。 2.

    2.8K10

    Android开发笔记(六十七)嵌入页面的碎片

    设计Fragment的目的是让页面布局更加灵活,不但可以随意组装和拼接各个片段,还可以只更新某个片段实现页面局部更新的功能(这个类似网页的ajax技术)。...Fragment可以协助我们完成如下任务: 1、在一个页面中嵌入多个连续可翻页的子视图,方面使用ViewPager统一管理; 2、开发一些通用的小部件,内部封装好代码逻辑,可直接嵌入到任意页面。...那么commitAllowingStateLoss方法便是兼容的做法,即使状态丢失也允许提交,但这其实是不安全的做法,要避免不安全的情况发生,得注意以下几点: 1、不要在onResume中调用commit...onCreateView : 创建Fragment的视图,在onCreate之后调用。...onActivityCreated : 在Activity页面创建完毕之后调用,这意味着onCreateView有可能在主页面尚未创建完毕时就完成了,比如说在主页面的onCreate方法中加入Fragment

    1.3K60

    Android ViewPager2 真的香么?

    和尚当前 SDK 已是最新版本,首先按照提示在 AndroidManifest->application 添加错误中要求的,但是并不能解决问题,之后查阅了很多资料,发现 Androidx 与 Android...解决 既然不兼容,只好先转到 Androidx 库下,chenzhenlindx大神的博客很有帮助; 工程 -> Refactor -> Migrate to Androidx; 提示是否保存以前工程...尝试 和尚尝试绑定不同背景色和文字内容;与 ViewPager 不同的是,适配器需要使用 RecyclerView.Adapte,这也意味着绑定数据的方式更灵活,和尚为了测试 ViewPager2...supportsRtl="true" 属性; 内边距和外边距建议设置 start/end 方式; ViewPager2 中设置 setLayoutDirection 时,整个 ViewPager2 不仅子...小结 和尚在学习过程中发现 ViewPager2 确实有很大优势,只是目前还没有发布到正式版,而且对于版本适配也会有一定难度,对于 Fragment 的懒加载与预加载还有待研究;但是学习体验一下还是很有帮助的

    2.1K31
    领券