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

为什么notifyDataSetChanged炸毁了ViewPager2中的PagerTransformer?

notifyDataSetChanged炸毁了ViewPager2中的PagerTransformer的原因是因为PagerTransformer是在ViewPager2的内部进行页面转换动画的过程中使用的。当调用notifyDataSetChanged方法时,ViewPager2会重新计算并更新页面的数量和位置,这可能导致PagerTransformer无法正确地应用于新的页面集合。

PagerTransformer是用于自定义页面切换动画的接口,它可以在页面切换过程中对页面进行自定义的转换效果。当调用notifyDataSetChanged方法时,ViewPager2会重新计算页面的数量和位置,并且会重新应用PagerTransformer。如果PagerTransformer依赖于旧的页面集合的数量和位置信息,那么在更新后的页面集合中,PagerTransformer可能无法正确地应用于新的页面,从而导致页面切换动画出现异常或不符合预期。

为了解决这个问题,可以尝试以下几种方法:

  1. 在调用notifyDataSetChanged方法之前,先将PagerTransformer设置为null,然后在更新完数据后再重新设置PagerTransformer。这样可以确保PagerTransformer在新的页面集合上重新应用时能够正确地工作。
  2. 在调用notifyDataSetChanged方法之前,先记录当前的页面索引,然后在更新完数据后,通过setCurrentItem方法将页面切换回之前记录的索引位置。这样可以避免PagerTransformer在更新后的页面集合上产生异常效果。
  3. 如果PagerTransformer的实现不依赖于页面集合的数量和位置信息,可以尝试将PagerTransformer设置为全局变量,并在更新数据后重新应用该PagerTransformer。这样可以确保PagerTransformer在更新后的页面集合上仍然能够正确地工作。

需要注意的是,以上方法仅适用于PagerTransformer与页面集合的数量和位置信息相关的情况。如果PagerTransformer的实现与数据集合的内容相关,那么在更新数据后可能需要重新创建PagerTransformer实例,并将其应用于ViewPager2。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云数据库 MySQL 版:https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云人工智能:https://cloud.tencent.com/product/ai
  • 腾讯云物联网平台:https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发:https://cloud.tencent.com/product/mobile
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务:https://cloud.tencent.com/product/tbaas
  • 腾讯云元宇宙:https://cloud.tencent.com/product/tencent-metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android ViewPager2 真的香么?

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

2.1K31
  • Android-ViewPager2

    今天我们介绍一下猪脚-ViewPager2,ViewPager2出现是为了替代ViewPager,它有以下几个优势: 支持RTL布局, 支持竖向滚动 支持notifyDataSetChanged RTL...registerOnPageChangeCallback替换了原来 addPageChangeListener ViewPager2是直接继承ViewGroup,意味着和ViewPager不兼容.ViewPager2...核心实现就是RecyclerView+LinearLayoutManager了,因为LinearLayoutManager本身就支持竖向和横向两种布局方式,所以ViewPager2也能很容易地支持这两种滚动方向了...具体使用我查看了Googlegithub仓库,地址 :ViewPager2 注意GithubViewPager2是Kotlin版本,我在这里给大家翻译成Java版本进行解读。...itemView); tvPage =itemView.findViewById(R.id.tv_baseitem_page); } } } Activity代码

    1.5K20

    ViewPager2+Fragment操作笔记

    ViewPager2+Fragment操作笔记 ViewPager2简介 ViewPager2官网介绍 ViewPager2官网Samples 距离ViewPager2正式版发布已经一年多了,目前ViewPager...他们偶尔会搭配TabLayout一起使用,相关代码直接阅读或者运行 ViewPager2官网Samples 即可,这里不做重复讲解。 下面主要讲一下在使用过程遇到问题~!...requestDisallowInterceptTouchEvent(false) } } } ViewPager2Fragment懒加载 懒加载 一般我们使用Fragment...hidden) { onUserVisible(); } else { onUserGone(); } } 但在ViewPager2,FragmentsetUserVisibleHint...使用:ViewPager2官网Samples DiffUtil 局部更新 DiffUtil和它差量算法 总结 本文主要介绍了ViewPager2配合Fragment使用方法以及在使用过程需要注意问题

    4.2K31

    ViewPager刷新问题原理分析及解决方案(FragmentPagerAdapter+FragementStatePagerAdapter)ViewPager+FragmentPagerAdapte

    为什么呢,因为第二次setAdapter时候,已经被FragmentManager缓存Fragent不会被新建,也不会被刷新,因为FragmentPagerAdapter在调用destroy时候,...采用是detach方式,并未真正销毁Fragment,仅仅是打算销毁了View,这就导致FragmentManager仍旧保留正Fragment缓存: @Override public void...Fragment其实就是之前未销毁Fragment,就会导致之前传递参数仍然是旧,这也是为什么可能不会刷新原因: @Override public Object instantiateItem(...FragmentPagerAdapter如何通过notifyDataSetChanged刷新ViewPager FragmentPagerAdapter数据发生改变时,往往要重新将数据设置到Fragment...,或者干脆新建Fragment,而对于用FragmentPagerAdapterViewPager来说,只是利用其notifyDataSetChanged是不够,跟踪源码会发现,notifyDataSetChanged

    3.3K20

    怎样在Android上实现一个iOS多任务列表效果

    ,滚动过程,ViewPager会回调transformPage(View page, float position),在这里面做想要变化就行,PageTransformer具体使用方法这里不细讲,...来获取,而不能通过getChildAt来获取,因为ViewGroupchild数组存放View顺序并不完全对应屏幕显示item从左到右顺序(为什么?...,让Adapter移除掉相应数据,最后调notifyDataSetChanged同步数据。...更新:        偶然看到androidx包下多了个ViewPager2,吃惊,看一下代码,注释如下: 1.png        可以看到,ViewPager2已经支持了从右到左布局了,也支持竖向布局...目前ViewPager2还是处于beta版,估计还有一些bug,期待后续正式上线

    3.7K60

    ConstraintLayout+ViewPager2打造《摇一摇新年幸运签》App

    采用Kotlin语言进行编写,涉及到技术有:ConstraintLayout、Drawable、 自定义View、Android动画、Viewpager2、字体设置和传感器使用。...但是这就产生了一个问题,布局嵌套,所以这也是我为什么采用ConstraintLayout来实现原因,如下图,只用了一层。...之前写过一篇ViewPager2打造Banner轮播图文章,这里在简单啰嗦两句,可能有的小伙伴没看之前文章。...在ViewPager2滑动监听onPageSelected方法调用如下方法即可 记得做如下判断 if (position <= llPointContainer.childCount) updateIndicator...随机代码在Kotlin很简单如下 (answerList.indices).random() 本来想加数据库,支持人为输入,后期慢慢实现吧。

    70820

    ConstraintLayout+ViewPager2打造《摇一摇新年幸运签》App

    采用Kotlin语言进行编写,涉及到技术有:ConstraintLayout、Drawable、 自定义View、Android动画、Viewpager2、字体设置和传感器使用。...但是这就产生了一个问题,布局嵌套,所以这也是我为什么采用ConstraintLayout来实现原因,如下图,只用了一层。...之前写过一篇ViewPager2打造Banner轮播图文章,这里在简单啰嗦两句,可能有的小伙伴没看之前文章。...在ViewPager2滑动监听onPageSelected方法调用如下方法即可 记得做如下判断 if (position <= llPointContainer.childCount) updateIndicator...传感器 Android中有很多传感器,这里我们用到是加速度传感器,使用步骤如下: 获取传感器管理者对象 获取加速度传感器对象 注册传感器(onCreate调用) 解除传感器(onDestory调用

    1.7K20

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

    这里我需要修改一下CustomImageView类代码: 其实就是改它所继承父类,为什么要这么改呢?现在就来说明一下。...因此直接绑定item就可以了,然后这里我用是networkUrl属性,因为你如果使用了biyingUrl会添加一个前缀,而这个API不需要前缀,同时我把刚才写样式设置了进来,这里就解释了为什么要更改继承父类...八、ViewPager2显示数据   当点击某一个图片时候,将值传到详情页面去,然后在这个页面可以左右滑动去查看图片,这无疑是比看一个点一个要好一些,可以利用ViewPager2来解决。 1....因为ViewPager2可以在setAdapter时直接设置RecyclerView.Adapter,很方便,因此这里同样需要一个适配器,这里适配器我不打算用原生来写。 2....: 这里就是通过传递过来url地址和查询到url进行比对,得到具体位置,然后显示这个vp的当前位置item,这里有一个false,为什么是false,因为不需要显示动画效果,如果不设置为false

    2.7K10

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

    这里我需要修改一下CustomImageView类代码: 其实就是改它所继承父类,为什么要这么改呢?现在就来说明一下。...因此直接绑定item就可以了,然后这里我用是networkUrl属性,因为你如果使用了biyingUrl会添加一个前缀,而这个API不需要前缀,同时我把刚才写样式设置了进来,这里就解释了为什么要更改继承父类...八、ViewPager2显示数据   当点击某一个图片时候,将值传到详情页面去,然后在这个页面可以左右滑动去查看图片,这无疑是比看一个点一个要好一些,可以利用ViewPager2来解决。 1....因为ViewPager2可以在setAdapter时直接设置RecyclerView.Adapter,很方便,因此这里同样需要一个适配器,这里适配器我不打算用原生来写。 2....: 这里就是通过传递过来url地址和查询到url进行比对,得到具体位置,然后显示这个vp的当前位置item,这里有一个false,为什么是false,因为不需要显示动画效果,如果不设置为false

    2.1K20

    什么是区块链,区块链是干什么

    人们常说,区块链是比特币底层技术,那么比特币底层技术又是什么呢... 为了防止这样反反复复、无穷无尽问题,我们有必要从为什么会有区块链说起... 区块链是怎么产生?...下面我们通过几个生活中经常能遇见场景来说明: 在生活,我们经常会遇到这样问题: 问题1:数个陌生人之间如何实现相互信任?...但后来经过法院查证,房子其实就是人家艾女士,但不动产已经毁了,艾女士只能默默流泪…… [0034pORpzy7pq4w1t901a&690] 问题3:该怎么证明我妈是我妈?如何实现自证?...可是还没等他说完,他家宝贝小儿子就因为玩炮仗把他家给了,账本也给毁了…… [0034pORpzy7pq4BHnt6e0&690] 全村人都傻眼了,连村长都不值得信任了,今后到底该咋办?...这个方法我已经在我开发比特币体系实践和应用了,刚好可以拿来解决你们村问题。”

    3.5K10

    关于RecyclerViewnotifyDataSetChanged

    在很久以前,总觉得ListViewnotifyDataSetChanged之类方法很神奇,数据更新后,调用一下,视图就变了… 不过自从知道观察者模式以后就没感觉那么神奇了,反而对View绘制测量一系列精细计算叹为观止...至于问为什么?和ViewRootImpl有关。...requestLayout和invalidate都会调用父类视图同名方法,最终到达ViewRootImpl同名方法,而ViewRootImpl会根据一些标记来决定是否执行measure/layout...罪魁祸首具体是不是requestLayout,我们承接上面notifyDataSetChanged方法流程,看一下AdapterDataObservable吧: static class AdapterDataObservable...话说回来,也就是在triggerUpdateProcessor方法,没有意外情况的话,仍然会执行requestLayout方法。

    66450

    Android MVP 模式介绍与实战

    Model: 业务逻辑和实体模型 View:用户交互和视图显示,在android对应activity Presenter: 负责完成View于Model间逻辑和交互 ? 2.为什么要用MVP?...比如在android开发,activity充当着MVCController角色,但是在实际开发还需要处理view逻辑(既担任V,又担任C)。当业务界面复杂时我activity会显得很庞大。...于是出现了MVP模式,它新增了一个Presenter角色用于处理数据和界面的模型以及逻辑,Activity仅仅用于展示界面和用户交互,这样就解决了MVC角色不清局面。...所以,MVP与MVC重大区别:在MVPView并不直接使用Model,它们之间通信是通过Presenter (MVCController)来进行,所有的交互都发生在Presenter内部。...就可以将数据变化显示出来 @Override public void show() { adapter.notifyDataSetChanged(); } } MainViewOperation.java

    86210

    Android 实现视屏播放器、边播边缓存功能、外加铲屎(IJKPlayer)

    ((ノO益O)ノ彡┻━┻亲生啊) 这里接口主要是把当前播放视频状态和信息到返回到逻辑播放器。 ?...mSurface = new Surface(surface); GSYVideoManager.instance().setDisplay(mSurface); } //告诉视频播放渲染画面销毁了...在切换时候可以做一些位移动画,让播放器全屏更加友好,下面长代码来袭((/- -)/。深夜码字不易,不知道为什么每次这个时候老婆意见很大啊。...恢复状态 notifyDataSetChanged(); //设置播放tag和位置,防止错位 listVideoUtil.setPlayPositionAndTag...为什么用它?因为谷歌到时候刚好看到,缘分啊懂吗。 这里需要个关注是手动点击和自动旋转之间冲突,主要看代码吧,老婆开始催我了 (ノಠ益ಠ)ノ彡┻━┻。

    2.9K90

    SpaceX 星际飞船,爆炸了! SpaceX 技术到底有多强?

    综合自:量子位 & Space X 开发者技术前线报道 回复“666”,获取一份技术人专属大礼包 伊隆,你飞船了。 ? 这不是开玩笑,不是恶意问候,是最新曝出噩耗。...但任务关口,发生这样事件,恐怕SpaceX承接载人发射,要延期了。 发生了什么? 发生爆炸是SpaceX正在研发下一代「星舰」火箭原型机。...在更早压力测试(不含点火测试),「星舰」火箭原型机已经有过3次失败记录。 好在此次事故并未有人员受伤。 是不是明天发射那一艘? 不是明天发射飞船! 不是明天发射飞船!...马斯克在此前接受外媒采访时表示,SpaceX计划暂停Starship开发,将专注于其首次载人飞行。 而此次失败,摧毁了Starship原型。...SpaceX公司表示:“与传统方法相比,摩擦搅拌焊接不会产生火焰、火花、惰性气体或烟雾,对铝锂合金焊接效果要好得多。

    68120

    经验之道:最有效 iOS 内存泄漏检测

    代码首先是要让人来看,是人在维护程序,所以可读性非常重要,在开发完这些功能后,我对于所有对象在运行过程创建与销毁是很清楚。...所以,在动作执行完后我们应该可以在已销毁对象中找到这个实例,运行截图如下: [image.jpg] 我看到任务是已经被销毁了,可是用来初始化命令对象为什么没有被销毁,我需要深挖一下这个命令对象(VASDebugPlatformServerCmd...: [image.jpg] 所以,我就看看,任务对象销毁了,那任务对象到底发生了什么事 截图是这样: [image.jpg] 我就是不死心,我就是要看到,到底是不是真的呢,为了进一步佐证命令对象在内存...,然后我就去查代码,命令对象到底经历了什么,从开始到结束执行过程是什么样: [image.jpg] [image.jpg] [image.jpg] 看完上面的截图,再去看命令对象引用计数变化就知道为什么了...,然后利用上面的原理去查看,它是不是被销毁了,如果没有被销毁,那么你应该去查你代码,到底在执行过程,哪里没有平衡引用计数。

    9.3K1013
    领券