java.lang.IllegalStateException: Fragment no longer exists for key f0:

报错日志:

java.lang.IllegalStateException: Fragement no longer exists for key f0: index 0
at android.support.v4.app.FragmentManagerImpl.getFragment(FragmentManager.java:564)
at android.support.v4.app.FragmentStatePagerAdapter.restoreState(FragmentStatePagerAdapter.java:211)
at android.support.v4.view.ViewPager.setAdapter(ViewPager.java:427)

代码情况:

在Activity里面把两个Fragment加载到FrameLayout里面,切换显示
每个Fragment里面有Viewpager包装两个Fragment

即:Fragment嵌套ViewPager嵌套Fragment
切换回第一个外层Fragment的时候报上述错误

报错原因

1、Fragment为空
2、Fragment已被销毁

分析原因:

由于我项目中,使用Fragment + ViewPager + Fragment的方式;
由于需求需要,ViewPager需要删除上次set 的adapter,并重新set 新的adapter,重新加载新的Fragment集合;
当我点击按钮,进行清除上次的adapter内容,并添加新的adapter内容是,就会偶现报以上错误。

解决办法:

1.此BUG的解法:(推荐)
就是在FragmentStatePagerAdapter的继承类里覆写此函数返回为空,这样FragmentManager.getFragment函数中就不满足第一个判断条件,不会执行后续代码也不会抛出异常了。

// java.lang.IllegalStateException: Fragment no longer exists for key f0:
    override fun saveState(): Parcelable? {
        return null
    }

2.(不推荐)

不使用 FragmentStatePagerAdapter,改为使用 FragmentPagerAdapter;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值