ViewNavigatorApplicationにおいてdestructionPolicy="never"でView遷移するときの動作についてです。
普通は、↓のようにして、pushView/popViewで遷移して、HomeViewのみインスタンスは1つだけ
という動作になります。(NextViewは毎回インスタンスが生成されます。)
これで、HomeViewにNEXTボタン、NextViewにBACKボタンを定義して
それぞれpushView/popViewで遷移するようにして、
add/creationComplete/viewActivate/viewDeactivateのイベントを定義すると
次のような順番に処理が行われます。
HomeView addHandler
HomeView creationCompleteHandler
HomeView viewActivateHandler
--push NEXT button--
NextView addHandler
NextView creationCompleteHandler
HomeView viewDeactivateHandler
NextView viewActivateHandler
--push BACK button--
HomeView addHandler
NextView viewDeactivateHandler
HomeView viewActivateHandler ←createしていない
--push NEXT button--
NextView addHandler
NextView creationCompleteHandler
HomeView viewDeactivateHandler
NextView viewActivateHandler
NextViewからHomeViewに戻るときにcreateしていないことがわかります。
ここで問題。
私が作りたいアプリは、HomeViewではなくNextViewのインスタンスを1つにして、
NextViewのcreateを1回だけにしたかったのです。
いろいろ悩んた結果、次のようにしました。
NEXTボタン
1回目HomeViewからNextViewに遷移するときは、replaceViewにして、
2回目からは、popViewで遷移します。
BACKボタン
NextViewからHomeViewはpushViewで遷移します。
そうすると、次のような順番で処理が行われ、
HomeViewではなく、NextViewのインスタンスを1つに保つことができました。
HomeView addHandler
HomeView creationCompleteHandler
HomeView viewActivateHandler
--push NEXT button--
HomeView [navigator.replaceView(NextView)]
NextView addHandler
NextView creationCompleteHandler
HomeView viewDeactivateHandler
NextView viewActivateHandler
--push BACK button--
NextView [navigator.pushView(HomeView, "pop")]
HomeView addHandler
HomeView creationCompleteHandler
NextView viewDeactivateHandler
HomeView viewActivateHandler
--push NEXT button--
data=pop
HomeView [navigator.popView()]
NextView addHandler
HomeView viewDeactivateHandler
NextView viewActivateHandler ←createしていない
dataを用いて、1回目と2回目を区別するようにする場合、こんな感じです。
// HomeViewのNextボタン押下時
protected function btnNext_clickHandler(event:MouseEvent):void { if(data == null){ trace("HomeView [navigator.replaceView(NextView)]"); navigator.replaceView(NextView); } else { trace("data=" + data); trace("HomeView [navigator.popView(slideLeftTran)]"); navigator.popView(slideLeftTran); } }でもちょっとむりくり感があります。
もっと簡単にインスタンスを1つにする方法はないのでしょうかね。