2012年9月4日星期二

[Android]FragmentTransactionとbackstackの関係

tabletのために開発したAndroid3.0に初めてFragmentを導入した。目的としては恐らくtabletの画面が大きいなので、Activity遷移する時、毎回全画面をrenderしなければならなくて、非効率だった。そこでFragmentを使って、Activity中の一部だけをrenderすることができる。

Android4.0から小さいなscreenでもFragmentがよく使われている。
最初に一つFragmentが作成られて、Activityの一部として表示される。入れ替わりたい時に、ActivityのFragmentManagerから新しtransactionを作って、入れ替わるの一連の動作を一つtransactionとしてcommitする。commitするまで、画面がrenderしない。

新しいFragmentを画面に表示する動作は、showじゃなくて、常にreplaceというmethodを使用している。
又replaceされたFragmentは現在表示している画面だ、一旦replaceされたら、Fragmentがdetachになる。前のFragmentの状態をそのまま保持したい場合、addToBackStackで新しいFragmentを追加してから、replaceする。しかし、addToBackStackでreplaceした後、更に新しいFragmentをreplaceする場合、popBackStackを使わないと、Stackの一番TopのFragmentだけが入れ替わられる。

没有评论:

发表评论