参考:
- 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();
}