在我的應用程序中,我有一個Activity,它由一個疊加的側面板(導航菜單)和一個LinearLayout組成,這是我的主佈局。我在我的佈局上進行交易並更換裏面的碎片。我只允許用戶向前導航,所以我根本不使用後臺堆棧。相反,當用戶在菜單中向前導航時,我使用Hashmap(僞緩存)將片段實例保留在內存中。這種方法唯一的問題是,當我嘗試用緩存中的片段替換當前在主佈局中的片段時(我通過調試器運行並且它說FragmentTransaction.replace()方法檢查後臺(??))。我不太確定問題在哪。Android:片段和背堆棧
07-25 22:03:47.690: ERROR/AndroidRuntime(3141): FATAL EXCEPTION: main
07-25 22:03:47.690: ERROR/AndroidRuntime(3141): java.lang.IllegalStateException: Fragment already added: GuideFragment{409f2fd8 id=0x7f06008c}
07-25 22:03:47.690: ERROR/AndroidRuntime(3141): at android.app.BackStackRecord.doAddOp(BackStackRecord.java:322)
07-25 22:03:47.690: ERROR/AndroidRuntime(3141): at android.app.BackStackRecord.replace(BackStackRecord.java:360)
07-25 22:03:47.690: ERROR/AndroidRuntime(3141): at android.app.BackStackRecord.replace(BackStackRecord.java:352)
07-25 22:03:47.690: ERROR/AndroidRuntime(3141): at StartActivity.changeContent(StartActivity.java:194)
07-25 22:03:47.690: ERROR/AndroidRuntime(3141): at StartActivity$5.onClick(StartActivity.java:165)
07-25 22:03:47.690: ERROR/AndroidRuntime(3141): at android.view.View.performClick(View.java:3117)
07-25 22:03:47.690: ERROR/AndroidRuntime(3141): at android.view.View$PerformClick.run(View.java:11935)
07-25 22:03:47.690: ERROR/AndroidRuntime(3141): at android.os.Handler.handleCallback(Handler.java:587)
07-25 22:03:47.690: ERROR/AndroidRuntime(3141): at android.os.Handler.dispatchMessage(Handler.java:92)
07-25 22:03:47.690: ERROR/AndroidRuntime(3141): at android.os.Looper.loop(Looper.java:132)
07-25 22:03:47.690: ERROR/AndroidRuntime(3141): at android.app.ActivityThread.main(ActivityThread.java:4025)
07-25 22:03:47.690: ERROR/AndroidRuntime(3141): at java.lang.reflect.Method.invokeNative(Native Method)
07-25 22:03:47.690: ERROR/AndroidRuntime(3141): at java.lang.reflect.Method.invoke(Method.java:491)
07-25 22:03:47.690: ERROR/AndroidRuntime(3141): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
07-25 22:03:47.690: ERROR/AndroidRuntime(3141): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
07-25 22:03:47.690: ERROR/AndroidRuntime(3141): at dalvik.system.NativeStart.main(Native Method)
後從更新的logcat – antlersoft
堆棧跟蹤。我想我的問題是,是否有可能將碎片保存在HashMap而不是Backstack中?根據文檔,如果碎片沒有被添加到Backstack中,它將被破壞。然而,當我將它添加到HashMap並稍後檢索它時,它不是null。另外,爲什麼LogCat告訴我,碎片已經被添加了,因爲它從來沒有放在Backstack上? –
您是在模擬器上還是在物理設備上測試?我在我的應用程序中以類似的方式處理碎片,並且它在物理設備上運行良好,但在模擬器上出現同樣的錯誤。 – theisenp