ViewNavigator.popView() メソッドは、現在のビューからスタックにある前のビューに制御を戻します。popView() メソッドを実行すると、現在のビューが破棄され、スタックにある前のビューが復元されます。前の View の復元には、その data プロパティをスタックからリセットすることも含まれます。
作成時に送出されるイベントなど、ビューのライフサイクルについて詳しくは、Spark の ViewNavigator コンテナと View コンテナのライフサイクルを参照してください。
新しいビューは、非アクティブ化された時点の元の data オブジェクトが設定されて復元されます。 したがって、通常は元の data オブジェクトを使用して古いビューから新しいビューにデータを渡すことはしません。 代わりに、古いビューの createReturnObject() メソッドをオーバーライドします。createReturnObject() メソッドは、単一の Object を返します。
返されるオブジェクトの種類
createReturnObject() メソッドによって返される Object は、ViewNavigator.poppedViewReturnedObject プロパティに書き込まれます。poppedViewReturnedObject プロパティのデータのタイプは ViewReturnObject です。
ViewReturnObject には、context と object の 2 つのプロパティを定義します。object プロパティには、createReturnObject() メソッドによって返される Object が格納されます。context プロパティには、pushView() を使用してナビゲーションスタックにビューがプッシュされたときにビューに渡された context 引数の値が格納されています。
poppedViewReturnedObject プロパティは、add イベントがビューで受信されるまでに、新しいビューに確実に設定されます。poppedViewReturnedObject.object プロパティが null の場合、データは返されません。
例:ビューに対するデータの引き渡し
次の SelectFont.mxml の例は、フォントサイズを設定できるビューを示しています。createReturnObject() メソッドのオーバーライドにより、値は Number として返されます。前のビューから渡された data プロパティの fontSize フィールドによって、TextInput コントロールの初期値が設定されます。
<?xml version="1.0" encoding="utf-8"?>
<!-- containers\mobile\views\SelectFont.mxml -->
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
title="Select Font Size"
add="addHandler(event);">
<s:layout>
<s:VerticalLayout paddingTop="10"
paddingLeft="10" paddingRight="10"/>
</s:layout>
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
// Define return Number object.
protected var fontSize:Number;
// Initialize the return object with the passed in font size.
// If you do not set a value,
// return this value for the font size.
protected function addHandler(event:FlexEvent):void {
fontSize = data.fontSize;
}
// Save the value of the specified font.
protected function changeHandler(event:Event):void {
fontSize=Number(ns.text);
navigator.popView();
}
// Override createReturnObject() to return the new font size.
override public function createReturnObject():Object {
return fontSize;
}
]]>
</fx:Script>
<s:Label text="Select Font Size"/>
<!-- Set the initlial value of the TextInput to the passed fontSize -->
<s:TextInput id="ns"
text="{data.fontSize}"/>
<s:Button label="Save" click="changeHandler(event);"/>
</s:View>
次の図は、SelectFont.mxml によって定義されるビューを示しています。
次の例の MainFontView.mxml というビューでは、SetFont.mxml で定義されているビューを使用しています。 MainFontView.mxml ビューでは、次のことが定義されています。
SetFont.mxml で定義されているビューに切り替える ActionBar の Button コントロール。
View.data プロパティが null かどうかを最初に判断する add イベントのイベントハンドラー。null の場合は、イベントハンドラーが data.fontSize フィールドを View.data プロパティに追加します。
data プロパティが null でない場合は、イベントハンドラーがフォントサイズを data.fontSize フィールドの値に設定します。
<?xml version="1.0" encoding="utf-8"?>
<!-- containers\mobile\views\MainFontView.mxml -->
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
title="Font Size"
add="addHandler(event);">
<s:layout>
<s:VerticalLayout paddingTop="10"/>
</s:layout>
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
// Change to the SelectFont view, and pass the current data property.
// The data property contains the fontSize field with the current font size.
protected function clickHandler(event:MouseEvent):void {
navigator.pushView(views.SelectFont, data);
}
// Set the font size in the event handler for the add event.
protected function addHandler(event:FlexEvent):void {
// If the data property is null,
// initialize it and create the data.fontSize field.
if (data == null) {
data = new Object();
data.fontSize = getStyle('fontSize');
return;
}
// Otherwise, set data.fontSize to the retured value,
// and set the font size.
data.fontSize = navigator.poppedViewReturnedObject.object;
setStyle('fontSize', data.fontSize);
}
]]>
</fx:Script>
<s:actionContent>
<s:Button label="Set Font>"
click="clickHandler(event);"/>
</s:actionContent>
<s:Label text="Text to size."/>
</s:View>