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();