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つにする方法はないのでしょうかね。


0 件のコメント:
コメントを投稿