質問

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