2017-05-11 25 views
0

正在獲取IllegalStateException:添加片段時,無法在activity的onSaveInstanceState後執行此操作。它大部分時間都在工作,但看到IllegalStateException發生了一些時間。即使檢查isFinishing(),原因仍然是IllegalStateException:無法在onSaveInstanceState後執行此操作

附加片段檢查活動完成後仍然存在的:

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

爲什麼任何解釋「IllegalStateException異常:不能後的onSaveInstanceState執行此操作」仍然可能發生?

代碼片斷正在吹。

在活動

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

片段顯示一個新片段:

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 
    } 
} 

崩潰

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) 

回答

0

後的onSaveInstanceState你不能提交事務,所以使用StateLoss提交。

ft.commitAllowingStateLoss(); 
+0

謝謝Vijay!想知道爲什麼在使用commitAllowingStateLoss(它有一些報告的意外效果)之前仍然會發生這種情況。 – lannyf

相關問題