Question

My activity crashes when I pause it. I could see from the logs, it is failing at saveInstance. I am not sure how to fix it.

protected void onSaveInstanceState(Bundle savedInstanceState) 
    {           
        NavFragment navListFragment = (NavFragment)getSupportFragmentManager().findFragmentByTag(Const.TAG_FRAGMENT_NAV);   
        if (navListFragment != null)
        {
            savedInstanceState.putInt(Const.STATE_VAR_NAV_INDEX, navListFragment.getSelection());
            Log.i("STATE", "navListFragment.getSelection(): " + navListFragment.getSelection());
        }

        Fragment contentFragment = getSupportFragmentManager().findFragmentByTag(Const.TAG_FRAGMENT_CONTENT);
        if(contentFragment != null && contentFragment instanceof BasicContentFragment)
        {                       
            savedInstanceState.putBoolean(Const.STATE_VAR_IS_CONTENT, true);
            savedInstanceState.putInt(Const.STATE_VAR_CONTENT_INDEX, ((BasicContentFragment)contentFragment).getCurrentPage());

            if(Const.IS_LARGE_SCREEN)
            {
                SlidingDrawer drawer = (SlidingDrawer)findViewById(R.id.selector_drawer);
                if(drawer != null)              
                    savedInstanceState.putBoolean(Const.STATE_VAR_IS_LIST_VISIBLE, drawer.isOpened());                          
            }
        }

        savedInstanceState.putString(Const.STATE_VAR_HEADING, mHeading);

        super.onSaveInstanceState(savedInstanceState); // crashes in this line
    }

Logs:

02-04 10:50:20.320: E/AndroidRuntime(23650): FATAL EXCEPTION: main
02-04 10:50:20.320: E/AndroidRuntime(23650): java.lang.IllegalStateException: Failure saving state: active DialogFactory{407dd070} has cleared index: -1
02-04 10:50:20.320: E/AndroidRuntime(23650): at android.support.v4.app.FragmentManagerImpl.saveAllState(FragmentManager.java:1695)
02-04 10:50:20.320: E/AndroidRuntime(23650): at android.support.v4.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:499)
02-04 10:50:20.320: E/AndroidRuntime(23650): at com.philly.prosportsframework.activity.MainFragmentActivity.onSaveInstanceState(MainFragmentActivity.java:625)
Was it helpful?

Solution

It certainly looks like there is a "leftover" after the DialogFactory Fragment in FragmentManager, but the Fragment itself has it's state already cleared. So when the FragmentManager tries to save the state, it fails.

Try to explicitly remove the DialogFactory from FragmentManager via the FragmentTransaction.remove(Fragment fragment) method. If it didn't help try to call FragmentManager.executePendingTransaction() before saving the state (and after commiting the remove transaction).

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top