replace、または、addした時に、addToBackStackを呼んでおけば、バックキーで1つ前のフラグメントに戻ることができた・・・。
これは、バックキーを押した場合、デフォルトでpopBackStackが呼ばれるからである・・・。
FragmentManager | Android Developers
いくつかオーバーライドメソッドがあるが、何も指定しない場合は1つ前に戻るタイプ・・・。
最初に文字列(String)を指定するタイプは、addToBackStackで付けたトランザクション名のトランザクション後に戻す・・・。(第2引数が0の場合・・・。)
menuのmain.xmlは
Menu1からMenu7までに増やした・・・。
strings.xmlもそれに合わせて・・・。
Menu1のaddToBackStackでnullではなく、トランザクション名"tag1"を付けた・・・。
(addの時の"tag1"と混同しちゃうなあ・・・。失敗した・・・。別物です・・・。)
Menu2のaddToBackStackは"tag2"・・・。
Menu3のaddToBackStackは"tag3"・・・。
こうしておくと、このトランザクション名をpopBackStackに指定することでそこに戻すことができる・・・。
Menu4の時は、popBackStackでトランザクション"tag1"後の状態まで戻す・・・。
例えば、1番最初のデフォルト画面から、赤いfragment1に切り替わったとき、addToBackStackで"tag1"と指定していたとする・・・。
そのあとも他の画面に何度か切り替えてから、popBackStackで"tag1"を指定すると、第2引数が0なら赤いfragment1、POP_BACK_STACK_INCLUSIVEの場合は最初のデフォルト画面になる・・・。
今回は0のトランザクション後にしておく・・・。
Menu5は"tag2"・・・。
Menu6は"tag3"・・・。
Menu7は引数なしバージョンを呼ぶ・・・。
これは1つ前に戻る・・・。
MainFragment.javaには、
onResume、onPause、onStopを追加し、countを増やす処理もonResumeに移した・・・。
白いデフォルト画面で、Menu1を選択・・・。
onCreate・・・。
onCreateView・・・。
onStart・・・。
onResume・・・。
countは1・・・。
ここまでは想定通り・・・。
Menu2を選択・・・。
onCreate・・・。
onCreateView・・・。
onStart・・・。
onResume・・・。
countが1・・・。
fragment2がonCreateからonResumeまで呼ばれていくのはいいとして、
fragment1のonPauseが呼ばれない・・・、というより何も呼ばれていない・・・。
ここが不思議なところだが、
【Android】Fragmentを使うときのコツとか色々 - Qiita
Show/Hide
セットされている(Add済みの)Fragmentの表示/非表示を切り替える。
このとき、ライフサイクルは変化しない。
フラグメントを追加して、前のフラグメントが非表示になった場合なども、ライフサイクルは変化しないのだろうか・・・。
Activityの非表示とは違うみたい・・・。注意・・・。
Menu3でfragment3を追加・・・。
(onCreate~onResumeまでのトーストは省略・・・。)
やはり、fragment2のハンドラはどれも呼ばれない・・・。
ここでMenu4を選択・・・。
"tag1"は、白い画面→fragment1のトランザクションを示しているので、
赤に戻ってくる・・・。
この時、onPause・・・。
onStop・・・。
onDestroyView・・・。
onDestroy・・・。
もう一度onPause・・・。
onStop・・・。
onDestroyView・・・。
onDestroy・・・。
最初から流れを書くと、
白い画面→fragment1→fragment2→fragment3
↑
tag1
となっている状態でtag1の後に戻れと言ってるのだから、fragment3とfragment2は破棄されてfragment1に戻ってくる・・・。
この2つのFragmentの破棄によって、onPauseからonDestroyまで、2回ずつ呼ばれているのである・・・。
白い画面→fragment1→fragment2→fragment3→fragment1
↑
tag2
この時のMenu5もfragment2が表示されるし、
白い画面→fragment1→fragment2→fragment3→fragment1→fragment2
↑
tag3
この時のMenu6もfragment3が表示される・・・。
そして、その後ろにあった2つのFragmentは破棄される・・・。
tag3の位置、fragment3からMenu7で戻ると、
fragment2に戻り、さらにMenu7で、
fragment1に戻り、さらにMenu7で、
最初の白い画面に戻れた・・・。
ということで、バックスタックの状態も復元されているのがわかった・・・。