Open EmmanuelMess opened 5 years ago
Hi @EmmanuelMess . I investigated the bug and fortunately I was able to find what went wrong. I fixed it by checking if fragmentManager.executePendingTransactions()
is true before putting the fragment in the fragment manager... Look for for (Fragment fragment : fragments){...}
in your onSaveInstanceState
method inside TabFragment
. Wrap the statements inside it with if (fragmentManager.executePendingTransactions()){...}
. It should now look like this...
if (fragmentManager.executePendingTransactions()) {
fragmentManager.putFragment(outState, "tab" + i, fragment);
i++;
}
Hope it help.
java.lang.IllegalStateException: Fragment MainFragment{bf23580 (fe765438-4b89-4b46-a91b-eb96bf0aad7e)} is not currently in the FragmentManager at androidx.fragment.app.FragmentManagerImpl.putFragment(FragmentManagerImpl.java:350) at com.amaze.filemanager.ui.fragments.TabFragment.onSaveInstanceState(TabFragment.java:226) at androidx.fragment.app.Fragment.performSaveInstanceState(Fragment.java:2766) at androidx.fragment.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManagerImpl.java:2289) at androidx.fragment.app.FragmentManagerImpl.saveAllState(FragmentManagerImpl.java:2348) at androidx.fragment.app.FragmentController.saveAllState(FragmentController.java:151) at androidx.fragment.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:513) at androidx.appcompat.app.AppCompatActivity.onSaveInstanceState(AppCompatActivity.java:533) at com.amaze.filemanager.ui.activities.MainActivity.onSaveInstanceState(MainActivity.java:1150) at android.app.Activity.performSaveInstanceState(Activity.java:1549) at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1444) at android.app.ActivityThread.callActivityOnSaveInstanceState(ActivityThread.java:4836) at android.app.ActivityThread.callActivityOnStop(ActivityThread.java:4184) at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:4148) at android.app.ActivityThread.handleStopActivity(ActivityThread.java:4223) at android.app.servertransaction.StopActivityItem.execute(StopActivityItem.java:41) at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:145) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1823) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:198) at android.app.ActivityThread.main(ActivityThread.java:6729) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Keeping this issue open and moving to 3.7 as the fix was just a band-aid. Ideally we should not be saving the whole fragment to instance state, and use viewmodel for TabFragment. This can easily cause OutOfMemoryException as we experienced in past with MainFragment.
Any news on this issue?