[安卓]错误:"Can not perform this action after onSaveInstanceState"而不使用它



我是安卓系统的初学者,我必须创建一个简单的应用程序,为学生处理课程手册。基本上,有时我会注销并崩溃,有时不会。我不使用se函数";onSaveInstanceState";但当我销毁一个包含3段课程列表的片段时,请给我一个错误。";on销毁"是必要的原因,如果我更改片段,那么列表就会消失。。。通过onDestry内部的te函数,我解决了它。我发布了一些信息,如果你需要更多,只需询问。。。谢谢

碎片销毁:

@Override
public void onDestroyView() {
super.onDestroyView();
final FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
for (Fragment fragment : adapter.getFragmentArrayList()) {
fragmentTransaction.remove(fragment);
}
fragmentTransaction.commit(); //give error here
}

错误:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.progettofinale, PID: 25843
java.lang.RuntimeException: Unable to destroy activity {com.example.progettofinale/com.example.progettofinale.MainActivity}: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:5111)
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:5140)
at android.app.servertransaction.DestroyActivityItem.execute(DestroyActivityItem.java:44)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at androidx.fragment.app.FragmentManager.checkStateLoss(FragmentManager.java:1551)
at androidx.fragment.app.FragmentManager.enqueueAction(FragmentManager.java:1591)
at androidx.fragment.app.BackStackRecord.commitInternal(BackStackRecord.java:341)
at androidx.fragment.app.BackStackRecord.commit(BackStackRecord.java:306)
at com.example.progettofinale.ui.mylesson.MyLessonFragment.onDestroyView(MyLessonFragment.java:62)
at androidx.fragment.app.Fragment.performDestroyView(Fragment.java:3232)
at androidx.fragment.app.FragmentStateManager.destroyFragmentView(FragmentStateManager.java:744)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:327)
at androidx.fragment.app.SpecialEffectsController$FragmentStateManagerOperation.complete(SpecialEffectsController.java:771)
at androidx.fragment.app.SpecialEffectsController$Operation.cancel(SpecialEffectsController.java:615)
at androidx.fragment.app.SpecialEffectsController.forceCompleteAllOperations(SpecialEffectsController.java:350)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2844)
at androidx.fragment.app.FragmentManager.dispatchDestroyView(FragmentManager.java:2812)
at androidx.fragment.app.Fragment.performDestroyView(Fragment.java:3225)
at androidx.fragment.app.FragmentStateManager.destroyFragmentView(FragmentStateManager.java:744)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:327)
at androidx.fragment.app.SpecialEffectsController$FragmentStateManagerOperation.complete(SpecialEffectsController.java:771)
at androidx.fragment.app.SpecialEffectsController$Operation.cancel(SpecialEffectsController.java:615)
at androidx.fragment.app.SpecialEffectsController.forceCompleteAllOperations(SpecialEffectsController.java:350)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2844)
at androidx.fragment.app.FragmentManager.dispatchDestroy(FragmentManager.java:2820)
at androidx.fragment.app.FragmentController.dispatchDestroy(FragmentController.java:345)
at androidx.fragment.app.FragmentActivity.onDestroy(FragmentActivity.java:306)
at androidx.appcompat.app.AppCompatActivity.onDestroy(AppCompatActivity.java:278)
at android.app.Activity.performDestroy(Activity.java:8239)
at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1344)
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:5096)
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:5140) 
at android.app.servertransaction.DestroyActivityItem.execute(DestroyActivityItem.java:44) 
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176) 
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) 
at android.os.Handler.dispatchMessage(Handler.java:106) 
at android.os.Looper.loop(Looper.java:223) 
at android.app.ActivityThread.main(ActivityThread.java:7656) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 

我遇到了同样的问题,因为我曾经将fragmentTransaction上的动画设置为以下

fragmentTransaction.setCustomAnimations(R.anim.push_right_in, R.anim.push_right_out, R.anim.push_left_in, R.anim.push_left_out);

如果你和我一样做,只需删除这一行,在之后一切都会好起来

最新更新