Android开发遇到:IllegalStateException: Can not perform this action after onSaveInstanceState问题

参考:

  1. IllegalStateException: Can not perform this action after onSaveInstanceState with ViewPager
  2. Very simple code, but got error “Activity has been destroyed” when use Fragment

之所以有这个问题,是因为FragmentTransaction#commit方法执行时,缺失了一些信息,导致状态异常。而之所以会出现信息缺失,是因为托管Activity还未创建完成,ViewPager或者FragmentTabHost就调用了FragmentTransaction#commit方法。因此,解决方法目前有两种:

1.在Activity创建完成后再调用FragmentTransaction#commit方法

可以在Activity#onPostCreate方法中执行ViewPager或FragmentTabHost的初始化与加载操作。

2.使用FragmentTransaction#commitAllowingStateLoss方法

另外,可以调用上面的方法,而不是FragmentTransaction#commit。上述方法允许信息丢失的情况下提交事务。

其他注意

同时,还需注意,在FragmentManager提交事务之前,必须确保托管Activity没有被销毁,可以用如下代码段做判断:

1
2
3
4
5
6
if (!isFinishing()) {
FragmentTransaction ft = getSupportFragmentManager()
.beginTransaction();
ft.replace(SOME_RES_ID, myFragmentInstance);
ft.commit();
}