[分享] Fragment在螢幕旋轉時產生的問題

看板AndroidDev作者 (R. Urakagi Ts'ai)時間13年前 (2011/06/09 12:01), 編輯推噓3(300)
留言3則, 3人參與, 最新討論串1/1
說實在Andrid 3.0真的是個半完成品,我找了好幾篇討論fragment怎麼處理螢幕旋轉,都 只看到一堆只能歸類為workaround的東西。 在xml裡面寫<fragment>然後直接setContentView只會吃Error,和你說fragment已經被創 造了這樣。所以如果你的port/land的layout是分開的,需要override onConfigureChanged來重新setContentView的話,xml裡根本不能用<fragment>。你需要 用<FrameLayout>以後,自行利用FragmentTransaction把Fragment加進去。 當你旋轉螢幕,呼叫setContentView時Fragment的生命週期不會有任何變動(on系列的 method全部不會被call),但是由於FrameLayout的instance變了,你在螢幕上是看不到 Fragment的。 此時如果你想重新add Fragment,就會吃到Fragment already added的錯誤。所以你需要 先把他remove掉後重新add,此時他的生命週期會跑: onPause onStop onDestroyView onCreateView onActivityCreated onStart onResume 你可以看到他跑了onDestroyView,所以你本來在裡面的東西就通通消失重新再來。但是 Fragment instance本身是沒有變動的,所以你可以先在onStop把你要的東西救出來保存 在field裡面,然後在onStart重新加回去或做其他處理。 -- 聽說把blog分類比較有人看 ._.a 主(雜)blog http://urakagi.blogspot.com/ 日文blog http://urakagij.blogspot.com/ 英文blog http://urakagie.blogspot.com/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.92.60.63

06/09 14:41, , 1F
06/09 14:41, 1F

06/11 08:43, , 2F
掃雷部隊總是要推一下的
06/11 08:43, 2F

06/11 10:05, , 3F
Push 辛苦你了
06/11 10:05, 3F
文章代碼(AID): #1Dy4MmpO (AndroidDev)
文章代碼(AID): #1Dy4MmpO (AndroidDev)