// //

{Android] 今日あったこと

複数のActivityを作成。
このActivity群を順々に遷移させ、最後のActivityにルート分岐させる。
ルート分岐はタイトル(最初のActivity)に戻る・アプリケーションの終了・その他。
今回はタイトルへ


仮にActivityを0〜3まで作成。(act0〜act3)
その順番通りに上記内容を再現。
ここを参考にフラグクラスを作成し、act0〜2までonRestart()でフラグ変数の値を取得し、
trueならばfinish()するようにした。
また、act3にはonCreate()内でフラグ変数にtrueを格納し、表示したタイミングでフラグを立てるようにした。
act3からボタン操作でintentを生成しact0へ遷移と共にact3自体をfinish()させる。


しかし実行すると、act0へ遷移後に戻るを押すとact2が表示される。
そのままact2→act1→act0と遷移。
intentでよく使われる「遷移」という言葉に素人なのでうっかり気を取られるけど、
これは起動時に表示したact0ではなく新しく生成したact0、言わばact0'と思われる。
こうなるとまた新たにフラグクラスが生成・格納されるわけで、
act3が表示されたタイミングでフラグ変数に格納したtrueが初期化される(?)。
となると、onRestart()でフラグを期待通りに判断できずこのような現象になったと思われる。


とりあえずact0の扱いは置いておくとしてact1〜2のみにonRestart()での処理を行うよう変更。
実行で同様にact0へ遷移。
ここで戻るを押してもact2には行かないが、さらにact0が出てくる。
act3→act0'→act0
今回は一枚多いact0を抜ければ終了されるが当然不恰好。


期待通りに動いた解決方法は、
アプリ終了用に作っておいた別のフラグ変数を組み合わせることで可能になった。
こちらはintentにputExtraで付与しておくintフラグ(仮:0or1で判断させたため)。
act0のonCreate()内にintentの受け取りと付与情報を取得してintフラグが1ならそのままfinish()
するようにしておくことでできた。


act3(フラグにtrue格納)→タイトルボタン(intent&intフラグに1格納)
→act0(というよりact0'が生成されるもintフラグ判断によりそのままfinish())


色々思い当たるところはあるが…もうよくわからない。
ていうか、もっとスマートにしたい…