日常工作所遇bug记录:
1、报错日志
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)
2、报错原因:
1、Fragment为空
2、Fragment已被销毁
3、分析原因
由于我项目中,使用Fragment + ViewPager + Fragment的方式;
由于需求需要,ViewPager需要删除上次set 的adapter,并重新set 新的adapter,重新加载新的Fragment集合;
当我点击按钮,进行清除上次的adapter内容,并添加新的adapter内容是,就会偶现报以上错误。
项目中使用的是 FragmentStatePagerAdapter;
4、解决方案
4.1、方案1(建议)
此BUG的解法:
就是在FragmentStatePagerAdapter的继承类里覆写此函数返回为空,这样FragmentManager.getFragment函数中就不满足第一个判断条件,不会执行后续代码也不会抛出异常了。
@Override
public Parcelable saveState() {
return null;
}
4.2、方案二(不建议)
另一种方案说法是:
不使用 FragmentStatePagerAdapter,改为使用 FragmentPagerAdapter;
Fragment no longer exists for key f0: index 0
java.lang.IllegalStateException: Fragment no longer exists for key f0: unique id 8b73484e-f6ef-43c6
java.lang.IllegalStateException: Fragement no longer exists for key f0: index 0