【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();
}
}