Вопрос

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)
Это было полезно?

Решение

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).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top