首页
学习
活动
专区
工具
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.4K40

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

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

3.5K30

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

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

2.1K30

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(

2K20

ViewPagerFragment状态保存哪些事

重新创建后 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.3K20

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

3.6K20

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.2K30

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

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

7710

仿抖音上下滑动分页视频

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

5.5K20

ViewPager2+Fragment操作笔记

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

4K31

移动开发作业一

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

19130

用 CoordinatorLayout 处理滚动

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

4.7K92

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

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

1.3K60

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

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

1.9K20

功能强大Android滚动控件RecyclerView

因为Android将RecyclerView定义support库,想要使用该控件就必须要添加相应依赖库才可以。所以就有了第一步操作。...这时候你在次选项栏拖取RecyclerView控件到布局,你会发现出现以下界面,证明添加库依赖成功,可以使用RecyclerView控件: ?...– 那我们就去布局代码看看,你会在布局代码中发现如下代码片段: ? 小伙伴们,发现其中特点没有?...布局文件我们需要创建一个RecyclerView子项布局,代码如下: ? 实现预览效果,我们在这里让界面实现左边是图片,右边是文字: ?...最后步骤都是MainActivity编写,咱们这里就不分开一一解释了,直接贴上代码,这样更能一目了然,每个代码都有注释,相信不难理解: 3.MainActivity定义数据源 4定义适配器

95341

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),但是横屏状态下,widthMeasureMode0(UNSPECIFIED)和MATCH_PARENT...=UNSPECIFIED,结果返回传入size,FrameLayout是maxWidth和maxHeight,而并不是parent给予specSize; 4.3 为何整体会测量两遍 这是由于FrameLayout

7.2K30

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

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

2.5K10
领券