sos の 作業メモ

プログラミングや英会話学習、マイルや旅行、日常生活など。最近はWebFormなASP.NETのお守りがお仕事です。

日々の生活にhappyをプラスする|ハピタス Gポイント

Fragmentってややこしい

これまでFragmentを避けていたおかげで、Googme Maps Android v2 API対応というよりもFragment対応でいろいろと手間取ってたりします。

本でさらっと読んだ知識だけじゃ、なかなか実用に耐えるコードは書けないですね…

ということで、ちょっとハマったところを紹介。

Fragmentから別のFragmentに遷移したときに、元のFragmentのonPauseが呼ばれない

レイアウトファイルの中で<fragment>を定義して、それをメインのActivityに貼り付けている場合、そこから別の全画面なFragmentに遷移しても、元のFragmentのonPauseが呼ばれないばかりか、backで戻ったときにonResumeも呼ばれない状況に悩みました。サイズ0のServiceを管理するフラグメントも一緒に定義していたので2ペーン時の挙動なのでしょうか?

仕方がないのでGoogleのドキュメントとサンプルのソースを見て、なんとか理解したところで修正。

動的生成に変更

とりあえず、Service管理用のフラグメントをUIを持たないものに実装しなおし、 FragmentTransactionで メイン画面のフラグメントそれぞれ追加するようにしたら、 無事にonResume/onPauseというか、onCreateViewから再構築されるようになりました。 setRetainInstanceもちゃんと効くしとりあえず解決でしょうか。