2012-12-06 47 views
11

由於我升級了我的應用程序以使用支持lib rev。 11和反對SDK 4.2編譯我收到以下錯誤片段已添加。支持庫

java.lang.IllegalStateException: Fragment already added: i{4079e598 #2 id=0x1020002 i} 
    at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1159) 
    at android.support.v4.app.BackStackRecord.popFromBackStack(BackStackRecord.java:729) 
    at android.support.v4.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1493) 
    at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:477) 
    at android.support.v4.app.FragmentActivity.onBackPressed(FragmentActivity.java:174) 

我看了一下計算器上類似的問題。其中一些人建議避免替換方法,我不使用。導致回滾崩潰的交易看起來是這樣的:

ft.remove(oldFrag).add(newFrag).addToBackStack(null).commit() 

其他評論說,如果你使用的片段轉換用戶再次按下回之前無法完成足夠快,這可能會發生。 由於我在給定的片段上使用了過渡動畫,這可能是原因。但是,刪除的過渡並不是一個選擇,因爲這專門發生在運行2.3.x版本的手機和錯誤是通過升級到LIB 11和SDK 4.2,我希望谷歌會在下一版本中修正它推出。

任何人都有類似的問題,這樣做是否計劃將固定在4.2.1或支持R12或建議,我能做些什麼來規避錯誤的信息?所以對我來說

+0

獲得同樣的事情,但'DialogFragment'。 –

+0

我也DialogFragment得到它偶爾...我[這裏]提交了報告(http://code.google.com/p/android/issues/detail?id=41552&thanks=41552&ts=1355757013)。但還沒有答案。 – phlebas

+0

對於支持庫r12有同樣的錯誤。發佈跟蹤到android問題跟蹤器。 – Sash0k

回答

6

我試圖使用提示,我發現here

因此,我增加executePendingTransactions()立即執行交易來解決該問題:

ft.remove(oldFrag).add(newFrag).addToBackStack(null).commit() 
getFragmentManager().executePendingTransactions(); 

這應該確保堆棧中始終處於清潔狀態我希望也沒有任何可以想到的負面缺點。

更新 雖然它在普通電話的工作,問題仍然在不具有已知的Android版本號,比如4.0.1或類似的一些通用的設備,而是報告一些類似日期「週四3月2 2006 00:00:00 GMT + 0100(MEZ)'作爲Android版本號,例如:samsung - espressowifixx - GT-P3110將給定的日期報告爲android版本,併產生片段添加異常...仍令人討厭。用戶不關心這個東西,所以它始終是被指責的已經是缺陷的開發者。 爲十億美元的公司,當然,但單一的開發商沒問題,只是做更有用的東西與你的時間比寫的應用程序;)

+0

我得到確切的相同的崩潰,我根本不使用上面的行。我只是像這樣添加ft.add(newFrag).addToBackStack(null).commit()。 – tasomaniac

+0

@phlebas你能否建議我編輯支持庫中的FragmentManager.java類 – Adi

+0

請提及你的代碼。 –

5

,事實證明,我其實是想增加一個片段的兩倍。也許在以前的支持庫版本中,它只是吞噬了這個並繼續前進。不幸的是,即使檢查片段isAdded()對我來說不起作用,因爲在我的情況下,我在事務有時間實際添加第一個片段之前將它們調回。

我最終什麼事做是創造一個布爾類變量fragmentAdded並將其設置爲true後我做了交易。然後在試圖添加片段之前檢查這個布爾值。可能不是你的問題的解決方案,但對我來說,這是希望它有幫助。

+5

真的很傷心,我們需要這樣做。是否真的沒有方法可以確切地說明片段是否已被添加? –

相關問題