문제

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