2
votes

I built a simple hello world app to check out the Flash Builder 4.5 mobile capabilities.

Here's how it works:

The Default View asks for name in an textinput and has a continue button

When you click the continue button it pushes a new view in the viewNavigator which just displays "Hello " + name in a label.

When you click anywhere in this view, it pops a view (i.e. itself) from the viewNavigator, to go back to the default view

I see only 1 issue with this: When I get back to the default view, it is in its initial state, i.e. the textInput is blank. It seems as if the viewNavigator created a new view of the default view's class and pushed this, instead of just removing the top view and displaying the previous one.

I see this being especially problematic for programs which display data in a grid and you can click the data to view the detail...when you get back, the grid will be empty.

Any ideas or gotchas to solve this?

EDIT:
Project name: HelloWorld
Code below:

HelloWorldDefaultView.mxml

protected function button1_clickHandler(event:MouseEvent):void {
    navigator.pushView(HiView, tName.text);
}

HiView.mxml

protected function view1_clickHandler(event:MouseEvent):void {
    navigator.popView();
}

protected function view1_creationCompleteHandler(event:FlexEvent):void {
    lblHello.text="Hello " + data;
}

Screenshots

Initial screen
Initial screen

Screen 2
Screen 2

Clicking on screen 2 gets us back to initial screen. Notice the blank textInput
Clicking on screen 2 gets us back to initial screen. Notice the blank textInput

2

2 Answers

1
votes

Have you tried to set destructionPolicy="never" and then

protected function button1_clickHandler(event:MouseEvent):void {
    data = tName.text;
    navigator.pushView(HiView, tName.text);
}

to store the data in current View's data - before changing to another one?

1
votes

That's the way it is supposed to work for mobile applications.

Check out this article: Flex 4.5 (Hero) – Persistant Data in MobileApplication

As they write:

Each time a View is removed from the display list (via popView() or pushView()) its instance is destroyed, but its data model is stored in memory.

In order to save session state for a View, you must modify the data property. This property will be requested when destroying the current instance of the View class. And the data property value will be assigned back to a newly created instance of the same View class when navigating back to that view.