這是我遇到的問題。我有一個活動A有一個片段F,它包含在FragmentPagerAdapter FPA中,在視圖V中。(A-> V-> FPA-> F)你可以在onDestroy()中分離一個片段嗎?
當A被破壞時(或在此情況,換出),F被附加,並在FPA中,這是在V.然而,當A被重新創建(例如有人點擊後退按鈕回到活動,例如),V和FPA不存在,所以F被重新創建(處於附加狀態!),但是對於不存在的東西,所以它不在視圖層次結構中。然後,當FPA試圖在這個片段上實例化狀態時,它會嘗試附加它,它什麼都不做,因爲它已經連接到了空氣中。
顯然有一些方法可以解決這個問題(例如,在活動的onCreate中存在V和FPA,以便片段在創建時可以到達某處),但是我想繼續懶洋洋地只在需要時才創造FPA和V.因此,似乎更新F的狀態以在onDestroy()中分離將是可取的。然而,state保存在onPause()中,這意味着我在這裏有點不走運。
有沒有辦法在A的onDestroy()中更新F的保存狀態?有沒有辦法說「如果活動被破壞,不要補充這個片段」?有沒有其他明顯的思考方式,我不考慮?感覺就像我在這裏以錯誤的方式處理事情。
噢 - 這是一個很好的資源trictive解決方案。絕對不適用於我的活動,該活動具有需要恢復的其他片段(不在FragmentPagerAdapter中)。 – secureboot
爲了在使用此解決方案時仍然保留某些片段的狀態,我所做的是以編程方式將碎片狀態保存在Activity的狀態包中。在Activity的onSaveInstanceState()中,我調用Fragment的onSaveInstanceState()來允許Fragment將其狀態添加到Bundle中。在Activity的onCreate()中,我以編程方式創建並添加片段,然後將Bundle傳遞給Fragment.setArguments()。片段通過其onCreate()中的getArguments()從Bundle中檢索已保存的狀態,並忽略傳遞給其onCreate()的Bundle。 – Trevor