Fatal Exception: java.lang.RuntimeException
Failure delivering result ResultInfo{who=@android:requestPermissions:, request=1, result=-1, data=Intent { act=android.content.pm.action.REQUEST_PERMISSIONS (has extras) }} to activity {com.funbit.android/com.blankj.utilcode.util.UtilsTransActivity}: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
Fragment 在显示或者隐藏,移除是出现Can not perform this action after onSaveInstanceState #解决办法:onSaveInstanceState方法是在该Activity即将被销毁前调用,来保存Activity数据的,如果在保存玩状态后 再给它添加Fragment就会出错。解决办法就是把commit()方法替换成 commitAllowingStateLoss()
现在常用的:Dialog , BottomSheetDialogFragment, ,DialogFragment 等在Show()的时候可以重写show()方法,因为系统show()是这样的:
public void show(@NonNull FragmentManager manager, @Nullable String tag) {
mDismissed = false;
mShownByMe = true;
FragmentTransaction ft = manager.beginTransaction();
ft.add(this, tag);
ft.commit();
}
自己修改下:
public void show(@NonNull FragmentManager fragmentManager, @Nullable String tag) {
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(showDialog, tag);
fragmentTransaction.commitAllowingStateLoss();
}
最主要的就是将:
ft.commit();改成:
fragmentTransaction.commitAllowingStateLoss();
这篇博客探讨了在Android应用开发中遇到的`IllegalStateException: Cannot perform this action after onSaveInstanceState`错误,该错误通常发生在尝试在Activity保存状态后添加或操作Fragment。解决方案是使用`commitAllowingStateLoss()`代替`commit()`方法来允许在可能损失状态的情况下提交事务。博客还提供了自定义DialogFragment的show()方法示例,以避免此类异常的发生。
515

被折叠的 条评论
为什么被折叠?



