Fragment already added

Android2022年4月15日 am8:08发布1年前 (2023)更新 3xcn.com@站长
1 0 0
广告也精彩
目录

前言

项目中会用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");

每个人出现的情况可能不一样,以上仅供参考。谢谢

参考文章

  1. viewpager+Fragment报错:Fragment already added: MsgOuChatFragment

 历史上的今天

版权声明 1、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com
3、 本站文章: 部分来源于网络,仅供站长学习和参考,若侵权请留言
广告也精彩

相关文章

广告也精彩

暂无评论

评论审核已启用。您的评论可能需要一段时间后才能被显示。

暂无评论...

网站升级中

公告

近期网站升级中,可能存在一些bug。欢迎反馈 https://www.91es.com/we.html

本站域名

本站域名 : 91es.com3xcn.com。本站邮箱 : 站长邮箱 i@oorr.cn,通知邮箱we@oorr.cn ,如有更新,请看公告 。