这种情况很少发生,但偶尔我的应用程序会因添加和替换片段时出现IllegalStateException而崩溃。我是这样做的,我是用动画制作的。
private void addFragmentReplace(int containerId, Fragment fragment) {
// check if the fragment has been added already
Fragment temp = mFragmentManager.findFragmentByTag(fragment.getTag());
if (!Utils.checkIfNull(temp) && temp.isAdded()) {
return;
}
// replace fragment and transition with animation
mFragmentManager.beginTransaction().setCustomAnimations(R.anim.ui_slide_in_from_bottom_frag,
R.anim.ui_slide_out_to_bottom_frag).replace(containerId, fragment).addToBackStack(null)
.commit();
}
我已经研究过将“commit()”更改为“commitAllowingStateLoss()”但这真的是一个解决方案吗?它会阻止崩溃,但是,它不会导致其他冲突,例如片段有时不显示或其他?以下是我上面代码片段的一个奇怪的改进吗?
private void addFragmentReplace(int containerId, Fragment fragment) {
// check if the fragment has been added already
Fragment temp = mFragmentManager.findFragmentByTag(fragment.getTag());
if (!Utils.checkIfNull(temp) && temp.isAdded()) {
return;
}
// replace fragment and transition with animation
try {
mFragmentManager.beginTransaction().setCustomAnimations(R.anim.ui_slide_in_from_bottom_frag,
R.anim.ui_slide_out_to_bottom_frag).replace(containerId, fragment).addToBackStack(null)
.commit();
} catch (IllegalStateException e) {
e.printStackTrace();
mFragmentManager.beginTransaction().setCustomAnimations(R.anim.ui_slide_in_from_bottom_frag,
R.anim.ui_slide_out_to_bottom_frag).replace(containerId, fragment).addToBackStack(null)
.commitAllowingStateLoss();
}
}
提前致谢。我关注的是来自commitAllowingStateLoss()的文档,其中包含
与{@link #commit}类似,但允许在a之后执行提交 活动的状态已保存。这很危险,因为提交可以 如果活动需要稍后从其状态恢复,那么就会丢失 这应该仅用于UI状态正常的情况 对用户意外更改。
对此的一些提示或建议将不胜感激。谢谢!