报错日志:
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;

这篇博客探讨了一个在Android应用中遇到的错误:`java.lang.IllegalStateException: Fragment no longer exists for key f0: index 0`。问题出现在使用Fragment+ViewPager+Fragment的结构时,由于频繁切换和更新ViewPager的Adapter导致。分析原因可能是Fragment被错误地清理或者不存在。解决方案包括覆盖FragmentStatePagerAdapter的`saveState`方法返回空,或者改用FragmentPagerAdapter。这两种方法可以避免异常并确保正确处理Fragment的状态。
2565

被折叠的 条评论
为什么被折叠?



