参考:
- IllegalStateException: Can not perform this action after onSaveInstanceState with ViewPager
- 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
6if (!isFinishing()) {
FragmentTransaction ft = getSupportFragmentManager()
.beginTransaction();
ft.replace(SOME_RES_ID, myFragmentInstance);
ft.commit();
}