【Android】Activity, Fragment のライフサイクル関連

Android:FragmentとActivityのライフサイクルコールバック順序

この順番で走るそうな。
http://yuki312.blogspot.jp/2012/02/androidfragmentactivity.html

●アプリ起動→HOMEキー押下
  fragment.onAttach
  ↓
  fragment.onCreate
  ↓
  fragment.onCreateView
  ↓
  activity.onCreate
  ↓ 
  fragment.onActivityCreated
  ↓
  activity.onStart
  ↓
  fragment.onStart
  ↓
  activity.onResume
  ↓
  fragment.onResume
  ↓
  fragment.onPause
  ↓
  activity.onPause
  ↓
  fragment.onStop
  ↓
  activity.onStop

●バックグラウンドから復帰時
  activity.onRestart
  ↓
  activity.onStart
  ↓
  fragment.onStart
  ↓
  activity.onResume
  ↓
  fragment.onResume

●アプリ起動→バックキー押下でアプリ終了
  fragment.onAttach
  ↓
  fragment.onCreate
  ↓
  fragment.onCreateView
  ↓
  activity.onCreate
  ↓
  fragment.onActivityCreated
  ↓
  activity.onStart
  ↓
  fragment.onStart
  ↓
  activity.onResume
  ↓
  fragment.onResume
  ↓
  fragment.onPause
  ↓
  activity.onPause
  ↓
  fragment.onStop
  ↓
  activity.onStop
  ↓
  fragment.onDestroyView
  ↓
  fragment.onDestroy
  ↓
  fragment.onDetach
  ↓
  activity.onDestroy

Activity, Fragment のライフサイクルを確認する

コレは便利。
http://qiita.com/suzukihr/items/90a93e79dc67c585de75

Fragmentを使ってみる(画面回転時のライフサイクルについて)

なるほど。。。
http://k-1-ne-jp.blogspot.jp/2013/10/fragment_7300.html

なので、既にFragmentが作成されているかチェックをしてあげて、
ある場合には実行しないようにすることで回避(゚∀゚)キタコレ!!
次のチェックをMainActivityのonCreateを次のようにします。

@Override
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);

 Log.d(TAG, "Activity-onCreate");

 // Fragmentを管理するFragmentManagerを取得
 FragmentManager manager = getSupportFragmentManager();

 //既にFragmentが作成されているかチェック
 if (manager.findFragmentByTag("layout_fragment_1") == null) {
  // 追加や削除などを1つの処理としてまとめるためのトランザクションクラスを取得
  FragmentTransaction tx = manager.beginTransaction();

  // 1つ目のfragmentを生成
  MainFragment fragment1 = new MainFragment();
  Bundle bundle1 = new Bundle();
  bundle1.putString("title", "キタ――(゚∀゚)――!!");
  // フラグメントに渡す値をセット
  fragment1.setArguments(bundle1);

  // Fragment をスタックに追加する
  // メインレイアウトに対して追加先のビューのID、Fragment、Fragmentのタグ。
  // add() したときに既にバックスタックに同じタグの Fragment が存在する場合、
  // Fragment は新規作成されず、既にインスタンス化してある Fragment が再表示される。
  tx.add(R.id.layout_fragment_1, fragment1, "layout_fragment_1");
  // tx.add(R.id.layout_fragment_2, fragment2, "layout_fragment_2");
  //
  tx.commit();
 }
}