作者Romulus (R. Urakagi Ts'ai)
看板AndroidDev
標題[分享] Fragment在螢幕旋轉時產生的問題
時間Thu Jun 9 12:01:49 2011
說實在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
1F:推 tomap41017:推 06/09 14:41
2F:推 lovelycateye:掃雷部隊總是要推一下的 06/11 08:43
3F:推 nowar100:Push 辛苦你了 06/11 10:05