Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Fatal Exception: java.lang.IllegalStateException: Failure saving state: active fragment was removed from the FragmentManager

I recently changed my app to target API Level 28 and also started using androidx instead of support libraries. After the change, I'm noticing a crash that has the following traceback

Fatal Exception: java.lang.IllegalStateException: Failure saving state: active MyFragment{22caf6fc (04a7bbf5-8806-4a45-a25d-616ed244bf18) id=0x7f1000ff} was removed from the FragmentManager
       at androidx.fragment.app.FragmentManagerImpl.saveAllState(FragmentManagerImpl.java:2301)
       at androidx.fragment.app.FragmentController.saveAllState(FragmentController.java:150)
       at androidx.fragment.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:496)
       at androidx.appcompat.app.AppCompatActivity.onSaveInstanceState(AppCompatActivity.java:510)
       at com.company.utils.MyAppCompatActivity.onSaveInstanceState(MyAppCompatActivity.java:161)
       at android.app.Activity.performSaveInstanceState(Activity.java:1311)
       at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1288)
       at android.app.ActivityThread.callCallActivityOnSaveInstanceState(ActivityThread.java:4166)
       at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3577)
       at android.app.ActivityThread.handleStopActivity(ActivityThread.java:3633)
       at android.app.ActivityThread.access$1300(ActivityThread.java:164)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1491)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:160)
       at android.app.ActivityThread.main(ActivityThread.java:5541)
       at java.lang.reflect.Method.invoke(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:372)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:964)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:759)

All my activities are extending from a base activity MyAppCompatActivity which extends from AppCompatActivity. And in the onSaveInstanceState method of MyAppCompatActivity, I have a few log lines there. I have three fragments in this activity implemented under a ViewPager with FragmentStatePageAdapter and the activity itself is not overriding onSaveInstanceState method.

I went through a few SO posts close to this such as this one and this one, but it looks as if it's happening when we're using FragmentManager's methods to manage the fragments ourselves rather than using a ViewPagerAdapter handle it. I'm not doing that and the closest thing that I'm doing away from the usual flow is overriding FragmentStatePageAdapter's methods instantiateItem and destroyItem to help me have a method to get a fragment's reference in the code as given in this SO answer.

like image 776
Arun Kumar Nagarajan Avatar asked Nov 13 '18 15:11

Arun Kumar Nagarajan


3 Answers

Which Fragment library version did you use? There is an issue with 1.1.0-alpha01.

like image 60
Yu-Hsuan Avatar answered Oct 13 '22 05:10

Yu-Hsuan


I am using the latest gradle as below

implementation 'androidx.core:core:1.1.0-alpha03'

I have compared crashing fragment with other fragment code and found the difference as below: Crashing fragment has method setRetainInstance(true); inside onCreateView() as shown in below snippet.

     @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
       setRetainInstance(true);
}

I come across the link which says not to use setRetainInstance : setRetainInstance - This can only be used with fragments not in the back stack

I removed the setRetainInstance(true) for crashing fragmnet; It's working now.

How to replicate this issue: MainActivity --> HomeFragment --> FirstFragment(crashing fragment) --> HomeFragment

MainActivity loads with HomeFragment which replaced by FirstFragment and then going back to HomeFragment. Then moving my app to background and crash happens with below exception.

 java.lang.IllegalStateException: Failure saving state: active 
FirstFragment{fd50037 (4a8b618e-a0a8-45d0-aa37-ba08393b8f68)
 id=0x7f08009c} was removed from the FragmentManager
like image 5
Pradip Tilala Avatar answered Oct 13 '22 04:10

Pradip Tilala


Add a dependency in build.gradle app

implementation 'androidx.preference:preference:1.1.0-alpha05'

it will works for me, thanks to

Refer this - https://issuetracker.google.com/issues/119256498

my issues are in run time I'm giving permission to camera and storage after that seconds the camera is open my app is crashed. I use this my issue is solved

like image 1
sara vss Avatar answered Oct 13 '22 05:10

sara vss