フォーラム一覧   -   トピック一覧
   超ビギナー
     ViewStackでの画面遷移に関して
投稿するにはまず登録を

フラット表示 前のトピック | 次のトピック
投稿者 トピック
nobu
投稿日時: 2007-8-20 22:02
ご主人様
登録日: 2006-6-17
居住地:
投稿: 588
Re: ViewStackでの画面遷移に関して
>k_nakamuraさん

サンプルつくりました。
Main.mxmlにViewStack用にSub1/2/3.mxmlの3画面を作りました。
画面の"<",">"を押すことでViewStackを前後に切り替えます。
その際に、各サブ画面に用意したsubCall()を呼び出しています。
※subCall()の中身はただのAlertです。

仕組みとしては、各Subのinitializeで親コンポであるMain.ViewStack
のChangeイベントに対してイベントハンドラを定義しています。
子→親の参照です。


■Main.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:ns1="*">
	<mx:Script>
		<![CDATA[
			private function allowBtnOnClick(e:Event):void
			{
				if (e.currentTarget.label == ">")
				{
					if (vs.selectedIndex < vs.childDescriptors.length-1) 
					{
						vs.selectedIndex++;
					}
				}
				else
				if (e.currentTarget.label == "<")
				{
					if (vs.selectedIndex > 0) 
					{
						vs.selectedIndex--;
					}
				}
				else
				{
					vs.selectedIndex = 0;
				}
			}
		]]>
	</mx:Script>

	<mx:ViewStack x="151.5" y="62" id="vs" width="200" height="200">
		<mx:Canvas label="View 1" width="100%" height="100%">
			<ns1:Sub1 x="0" y="0">
			</ns1:Sub1>
		</mx:Canvas>
		<mx:Canvas label="View 2" width="100%" height="100%">
			<ns1:Sub2 x="0" y="0">
			</ns1:Sub2>
		</mx:Canvas>
		<mx:Canvas label="View 3" width="100%" height="100%">
			<ns1:Sub3 x="0" y="0">
			</ns1:Sub3>
		</mx:Canvas>
	</mx:ViewStack>
	<mx:Button x="151.5" y="270" label="<" id="prevBtn" click="allowBtnOnClick(event);"/>
	<mx:Button x="311.5" y="270" label=">" id="nextBtn" click="allowBtnOnClick(event);"/>
	<mx:Button x="199.5" y="270" label="home" width="104" id="homeBtn" click="allowBtnOnClick(event);"/>
	
</mx:Application>


■Sub1.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" width="200" height="200" title="View1" initialize="onInitialize(event);">
	<mx:Script>
		<![CDATA[
			import mx.events.FlexEvent;
			import mx.controls.Alert;
			
			private function onInitialize(e:FlexEvent):void
			{
				Main(parentDocument).vs.addEventListener(Event.CHANGE,subCall, false, 0, true);
			}
			
			public function subCall(e:Event):void
			{
				if (e.currentTarget.selectedIndex == 0)
				{
					Alert.show("Sub1 !! ");
				}
			}
		]]>
	</mx:Script>
</mx:Panel>


■Sub2.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" width="200" height="200" title="View2" initialize="onInitialize(event);">
	<mx:Script>
		<![CDATA[
			import mx.events.FlexEvent;
			import mx.controls.Alert;
			
			private function onInitialize(e:FlexEvent):void
			{
				Main(parentDocument).vs.addEventListener(Event.CHANGE,subCall, false, 0, true);
			}
			
			public function subCall(e:Event):void
			{
				if (e.currentTarget.selectedIndex == 1)
				{
					Alert.show("Sub2 !!");
				}
			}
		]]>
	</mx:Script>
</mx:Panel>


■Sub3.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" width="200" height="200" title="View3" initialize="onInitialize(event);">
	<mx:Script>
		<![CDATA[
			import mx.events.FlexEvent;
			import mx.controls.Alert;
			
			private function onInitialize(e:FlexEvent):void
			{
				Main(parentDocument).vs.addEventListener(Event.CHANGE,subCall, false, 0, true);
			}
			
			public function subCall(e:Event):void
			{
				if (e.currentTarget.selectedIndex == 2)
				{
					Alert.show("Sub3 !!");
				}
			}
		]]>
	</mx:Script>
</mx:Panel>



initializeで行っていますが、インスタンス生成の影響等もあるで
しょうから、creationCompleteイベントで行うほうが良い気がします。

1点難点なのが、前子画面が親のChangeイベントを参照しているので
選択されたViewに限らずイベントが発生してしまいます。よって、
これまた子画面から親のViewStack.selectedIndexを参照して、制御
しています。

またイベントリスナの破棄が若干気になるので、addEventLisener
にパラメータを与えて弱い参照にしています。

■イベントリスナ (AS3) とガーベジコレクション
http://weblogs.macromedia.com/akamijo/archives/2007/05/post_19.cfm


いかがでしょう?
フラット表示 前のトピック | 次のトピック

題名 投稿者 日時
   ViewStackでの画面遷移に関して k_nakamura 2007-8-20 17:48
     Re: ViewStackでの画面遷移に関して nobu 2007-8-20 17:53
       Re: ViewStackでの画面遷移に関して k_nakamura 2007-8-20 18:00
         Re: ViewStackでの画面遷移に関して nobu 2007-8-20 18:06
           Re: ViewStackでの画面遷移に関して satoshi 2007-8-20 18:08
             Re: ViewStackでの画面遷移に関して k_nakamura 2007-8-20 18:22
               Re: ViewStackでの画面遷移に関して yukari 2007-8-20 19:39
                 Re: ViewStackでの画面遷移に関して k_nakamura 2007-8-20 20:12
                 » Re: ViewStackでの画面遷移に関して nobu 2007-8-20 22:02
                     Re: ViewStackでの画面遷移に関して k_nakamura 2007-8-21 10:25
                       Re: ViewStackでの画面遷移に関して yukari 2007-8-21 12:58
                         Re: ViewStackでの画面遷移に関して k_nakamura 2007-8-21 14:34

投稿するにはまず登録を