Romulus 的筆記
RSS · 日本語 · 寫文章
Romulus 的文章歸檔

Fragment在螢幕旋轉時產生的問題

Jun 9, 2011
Android

說實在Andrid 3.0真的是個半完成品,我找了好幾篇討論fragment怎麼處理螢幕旋轉,都只看到一堆只能歸類為workaround的東西。
在xml裡面寫然後直接setContentView只會吃Error,和你說fragment已經被創造了這樣。所以如果你的port/land的layout是分開的,需要override onConfigureChanged來重新setContentView的話,xml裡根本不能用。你需要用以後,自行利用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重新加回去或做其他處理。