2017-05-11 1 views
0

obtenir IllegalStateException: Impossible d'effectuer cette action après onSaveInstanceState dans l'activité lors de l'ajout d'un fragment. Cela fonctionne la plupart du temps mais a vu il y a quelque temps cette IllegalStateException se produisant.ce qui pourrait être la raison même si check isFinishing() il obtient toujours IllegalStateException: Impossible d'effectuer cette action après onSaveInstanceState

le fragment d'ajout est effectué après vérification de l'activité est toujours là par:

if ((!mInSaveInstanceState) && !isFinishing()) 

toute explication pourquoi le « IllegalStateException: Impossible d'effectuer cette action après onSaveInstanceState » pourrait encore se produire?

l'extrait de code est soufflé.

de l'activité:

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    mInSaveInstanceState = true; 
    … … 
    super.onSaveInstanceState(outState); 
} 

extrait affichant un nouveau fragment:

void addNewFragment() { 
    if ((!mInSaveInstanceState) && !isFinishing()) { 
     FragmentManager fm = getSupportFragmentManager(); 
     String fragmentName = "NEW_ADDED_FRAGMENT"; 
     int holderId = R.id.new_fragment_holder; 
     NewFragment theNewFrgmt = new NewFragment(); 

     FragmentTransaction ft = fm.beginTransaction(); 
     ft.replace(holderId, theNewFrgmt, fragmentName); 
     ft.addToBackStack(fragmentName); 


     ft.setCustomAnimations(R.anim.hold, 0, R.anim.slide_left_in, 0); 
     ft.show(theNewFrgmt); 
     ft.commit(); //<=== it throws at here 
    } 
} 

l'accident

Fatal Exception: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 
    at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1832) 
    at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1850) 
    at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:643) 
    at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:603) 
    at com.zone.ui.MainActivity.addNewFragment(MainActivity.java:4522) 
    at com.zone.ui.MainActivity.access$000(MainActivity.java:262) 
    at com.zone.ui.MainActivity$8.onEvent(MainActivity.java:591) 
    at com.zone.ui.MainActivity$8.onEvent(MainActivity.java:587) 
    at com.zone.dataModel.EventManager.dispatchEvent(EventManager.java:96) 
    at com.zone.ui.tasklist.TaskListFragment$8.run(TaskListFragment.java:422) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5343) 
    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:905) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700) 

Répondre

0

Après onSaveInstanceState vous ne pouvez pas commettre transaction, utilisez donc StateLoss commettre.

ft.commitAllowingStateLoss(); 
+0

merci Vijay! aimerait savoir pourquoi cela peut encore arriver avant d'utiliser commitAllowingStateLoss (qui a un effet inattendu). – lannyf