作者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