前言
项目中会用Viewpager+Fragment来显示图片,先项目中测试ok,但是我单独拎出来做简单调试时出现:
java.lang.IllegalStateException: Fragment already added: PlayFragment
尴尬了,就我拎出来的demo代码片段有问题。
最后调试发现,是我测试数据的问题。
简单记录于此,以便提醒自己。
好记性不如烂笔头
正文
异常的部分日志:
AndroidRuntime( 6843): Shutting down VM
AndroidRuntime( 6843): FATAL EXCEPTION: main
AndroidRuntime( 6843): Process: com.biumall.image, PID: 6843
AndroidRuntime( 6843): java.lang.IllegalStateException: Fragment already added: PlayFragment{d00a1dd} (5d7297c6-1e8d-4006-b51a-6d371a996c1f id=0x7f080072)
AndroidRuntime( 6843): at androidx.fragment.app.FragmentStore.addFragment(FragmentStore.java:91)
AndroidRuntime( 6843): at androidx.fragment.app.FragmentManager.addFragment(FragmentManager.java:1713)
AndroidRuntime( 6843): at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:415)
AndroidRuntime( 6843): at androidx.fragment.app.FragmentManager.executeOps(FragmentManager.java:2404)
AndroidRuntime( 6843): at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2162)
AndroidRuntime( 6843): at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2100)
AndroidRuntime( 6843): at androidx.fragment.app.FragmentManager.execSingleAction(FragmentManager.java:1971)
AndroidRuntime( 6843): at androidx.fragment.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:311)
AndroidRuntime( 6843): at androidx.fragment.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:274)
AndroidRuntime( 6843): at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1244)
AndroidRuntime( 6843): at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1092)
AndroidRuntime( 6843): at androidx.viewpager.widget.ViewPager.onMeasure(ViewPager.java:1622)
原因分析
网上也有人记录原因,比如:
一般是因为fragment中有错误
我也测试过,直接吧我Fragment删除,使用简单的fragment替换,但依旧错误,因此我的不是上面的原因。
最后我打印ViewPagerAdapter所有日志:
Image_ViewPagerAdapter( 6843): getItem position : 0
Image_ViewPagerAdapter( 6843): getItem mPlayFragment : PlayFragment{d00a1dd} (5d7297c6-1e8d-4006-b51a-6d371a996c1f)
Image_ViewPagerAdapter( 6843): getItem position : 1
Image_ViewPagerAdapter( 6843): getItem mPlayFragment : PlayFragment{d00a1dd} (5d7297c6-1e8d-4006-b51a-6d371a996c1f id=0x7f080072)
发现,数据中0和1的PlayFragment对象竟然一样的!!!
查看插入图片的数据:
mImageList.add("/storage/udisk1/125la.png");
mImageList.add("/storage/udisk1/125la.png");
mImageList.add("/storage/udisk1/125la.png");
mImageList.add("/storage/udisk1/125la.png");
哎,为了偷懒,使用了重复数据,没想倒创建的PlayFragment以url为唯一的标志。
解决方式
把数据改成不同样的即可:
mImageList.add("/storage/udisk1/125la_1.jpg");
mImageList.add("/storage/udisk1/125la_2.jpg");
mImageList.add("/storage/udisk1/125la_3.jpg");
mImageList.add("/storage/udisk1/125la_4.jpg");
mImageList.add("/storage/udisk1/125la_5.jpg");
mImageList.add("/storage/udisk1/125la_6.jpg");
每个人出现的情况可能不一样,以上仅供参考。谢谢
参考文章
历史上的今天
暂无评论...
随机推荐
我常用的Monkey命令
Monkey的概念“猴子测试”是指没有测试经验的人甚至对计算机根本不了解的人(就像猴子一样)不需要知道程序的任何用户交互方面的知识,如果给他一个程序,他就会针对他看到的界面进行操作,其操作是无目的的、乱点乱按的。这种测试方式在产品周期中的早期阶段会找到很多很好的bug,为用户节省不少的时间。...
毕淑敏:你不能要求没有风暴的海洋
痛苦和磨难是人生不可分割的一部分。只有接受这一事实,我们才能超越它,更加看清生命的意义。你说你不要这些苦难,那么生命也就失去了框架。很多自杀的人,就是因为没有理会这种意义,一厢情愿地认为生命是应该只有甘甜没有挫败的。特别是在恋爱早期,那种汹涌的荷尔蒙带来的欢愉,让人把激情当成了常态。生命的常态,其...
Android app换肤简单记录
前言记录一下换肤的思路,方便自己查阅正文Android换肤已经烂大街了,很多大厂应用都做了,比如QQ、网易云、哔哩哔哩等,这些都是需要VVIP才可以体验的。这里推荐GitHub开源的而且很受欢迎的Android-skin-support,很强大。下面我就整理一下我对换肤的简单理解。换...
Android Studio删除引用的资源
前言之前说过,Android Studio有个功能(Android Studio Refactor/Remove Unused Resources【重构,移除没有引用的资源】),非常好用,但到了Android Studio高版本时好像失效了。最近看到其他的功能替代。因此记录于此,方便自己查阅...
脚本 adb push apk 新版本
前言这个版本包括创建对应目录等,比之前写的更简单了。这个是同事写的哈哈哈,摘抄于此。正文@echo offecho push update apkif exist null (del null):start@adb devices | findstr "\<device\...
OkHttp简单介绍之一
前言okhttp很常用的一个网络请求框架,因此记录一下如何使用,然后走一下源码流程。这篇只是简单记录一下okhttp的同步和异步请求。好记性不让烂笔头正文同步和异步初始化都一样,只是最后调佣的方法不一样。这里只是简单记录,因此直接上代码。在Module的build.gradle中引入...