[分享] Fragment在螢幕旋轉時產生的問題
說實在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
06/11 10:05, 3F
AndroidDev 近期熱門文章
PTT數位生活區 即時熱門文章