IllegalStateException: Fragment already added

該問題是由於要顯示的Fragment已經存在與記錄當中,但是你又第二次add.

if (!fragment.mDetached) {
1218            if (mAdded.contains(fragment)) {
1219                throw new IllegalStateException("Fragment already added: " + fragment);
1220            }
1221            mAdded.add(fragment);
1222            fragment.mAdded = true;
1223            fragment.mRemoving = false;
1224            if (fragment.mHasMenu && fragment.mMenuVisible) {
1225                mNeedMenuInvalidate = true;
1226            }
1227            if (moveToStateNow) {
1228                moveToState(fragment);
1229            }
1230        }

這是FragmentManager.java中的源代碼,這段代碼應該屬於異步。所以不管你的Fragment相關的狀態有沒有更新或處理完成,即使來了相同的Fragment這段代碼也會執行。就像上面的代碼,對於add相同的F(Fragment),F已經存在mAdded中了,你還往裏面添加,肯定會拋出異常了。

   對於開發應用而言,可以先判斷記錄中是否存在該Fragment。若存在,則可以直接show或者可以先remove再add,肯定還有其它方法,請自行嘗試找出。

   對於在系統方面解決這個問題,我的方法是對該代碼加上同步塊,另外在進入if語句之後先remove掉之前的fragment。該方法暫時解決了這個問題,不知道是不是有什麼嚴重的後遺症,如有不對的地方,請各位大神進行指點改正。謝謝!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章