簡體   English   中英

片段重新實例化並自己添加到活動中

[英]Fragments reinstantiating and adding to activity by themselves

我有帶適配器的viewPager,在其中實例化片段並在getItem()方法中將其返回。 因此,當我在第一頁上輸入Im時,我只有兩個片段。 當我旋轉手機時,它們都被破壞並被垃圾回收(系統調用它們的onDestroy()和onDetach(),我可以在.hprof內存轉儲中看到它們准備進行垃圾回收)。 但是,當使用新的viewpager和2個新的片段創建一個新的活動時,由於某種原因,系統會為先前被破壞的片段再創建2個片段,並將它們附加到活動中,而根本不將其添加到viewPager中。 它們只是位於fragmentManager的mActive和mAdded數組中。 當我旋轉設備幾次時,它每次都會創建這些新實例。 現在,這看起來像是泄漏,導致碎片沒有被垃圾收集,但實際上確實是。 所有這些片段都有不同的@xxx編號,並在新的片段管理器中進行新的活動。 我已經嘗試了一切,非常感謝任何幫助或建議,謝謝!

ViewPager處理其顯示的片段的生命周期。 正如您提到的,它會創建可見的Fragment及其旁邊的FragmentStatePagerAdapter (如果與FragmentStatePagerAdapter一起使用),以便在時間到時可以平滑地滑入它們。 當片段是淡出人們的視線,它可以destoryed並通過重新ViewPager在其意志。

旋轉屏幕的默認行為是與ViewPagerFragments一起重新創建活動。 但是,可以更改。 在清單中使用android:configChanges="orientation"可以防止在更改方向時重新創建活動。 更改方向時保留片段實例的另一種方法是在要保留的片段中調用setRetainInstance(true)

所以我是(出乎意料的:D)錯誤代碼。 我在Activity的onRestoreInstanceState()代碼中創建並設置了新適配器,因此它將舊片段放在后台。 很抱歉困擾着無法回答的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM