画面が回転するとFragmentが初期化されて困る問題
Androidアプリ開発については結構初心者なんですが、Androidアプリって画面が回転するとActivityが再生成されちゃうんですね。
その時、ActivityにくっついてるFragmentがもつ変数とかが全部初期化されてしまってヌルポで落ちるみたいな現象に直面しました。
この手の問題は結構みんな通る道らしく、ぐぐってみるとsetRetainInstance(true)
しようよ!って記事が沢山出てきました。
もちろんどういうふうに実装してるのかによると思うんですが、私の環境だとこれだけだと治りませんでした。
というのも、下記のようにActivity側のonCreate()
でFragmentを追加してたんですが
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FragmentManager manager = getFragmentManager(); Fragment fragment = OsushiFragment.newInstance(); FragmentTransaction fragmentTransaction = manager.beginTransaction(); fragmentTransaction.replace(android.R.id.content, fragment); fragmentTransaction.commit(); }
よく考えたら、Activityが再生性されるときもonCreate
を通るのだから、ここでFragment初期化する処理自分で書いてるぞ!!ってことで、以下のようにsavedInstanceState
がnullかどうかのチェックをカチこんで、2回目からは初期化されないようにしたらうまくいきましたとさ。
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (savedInstanceState == null) { FragmentManager manager = getFragmentManager(); Fragment fragment = OsushiFragment.newInstance(); FragmentTransaction fragmentTransaction = manager.beginTransaction(); fragmentTransaction.replace(android.R.id.content, fragment); fragmentTransaction.commit(); } }