actionscript-3apache-flexairflex4.5flex-mobile

Preload dynamically created views in Actionscript for Flex Mobile App


I've got the following problem, my boss wants me to make our app far more responsive without any waiting time between switching views. It used to a "standard" application based on a ViewNavigator but with just one View that was destroyed and re-created with different content based on the user's selection of tabs he created himself. Views were switched with the default SlideViewTransition. I'm down to half a second now with a slightly more lightweight approach as described below, however that half second is still too much.

The app is a tabbed application where the user can create and edit new views himself, so create/edit/delete tabs and their corresponding tabs. My current implementation is based on a ButtonBar and a Group that is used to display the "views". The group's content is created based on the selected tab. The content is based on XML data that stores all the required information to build the "view". Naturally, removing and creating the component's takes a little while (the half second I talked about), so I'm after another solution.

What I thought about is using the ViewNavigator and create all stored views upon application start.

Very much like this:

for each (var _view:XML in _allViewsConfig.children()) {
    var compView:View = new View();
    compView.percentHeight = 100;
    compView.percentWidth = 100;
    compView.name = _view.label;

    for each (var _groupElement:XML in _view.vgroup) {
        var group:VGroup = new VGroup;
        group.percentWidth = 100;
        group.percentHeight = 100;

        for each (var _windowElement:XML in _groupElement.window) {
            var window:WindowContainer = new WindowContainer;
            for each (var _componentElement:XML in _windowElement.component) {                  
                var component:UIComponent = _componentManager.create(_componentElement.@type, _componentElement);
                window.addElement(component);
            }

            group.addElement(window);
        }
        compView.addElement(group); 
    }
    views.addItem(compView);

}

views is an ArrayList that is used to store the created views.

The only problem I've got right now is that I can't use the Views stored in this ArrayList in the corresponding ViewNavigator.

I tried it the usual way, i.e. navigation.pushView(_viewCreator.views.getItemAt(0) as Class); This, however doesn't work, no error or anything, the ViewNavigatorjust doesn't do anything, so I guess that a View class can't be created like this.

So how can I make this work? Also, do you guys think that this is a proper solution to the problem, especially considering the whole dynamic nature of the application (being based on tabs)? Naturally, slide transitions will be completely disabled as they are quite slow with our complex components.

Any help, comments or thoughts would be greatly appreciated!

EDIT: On second thought, simply using Groups instead of ViewNavigator and View should make this a little more lightweight and solve the issue of views not being pushed.


Solution

  • In fact ViewNavigator pushView() is a mechanism which create an instance of a given Class (method parameter).

    For all navigation history purpose, ViewNavigator uses NavigationStack objects to store relevant values (that you can customize too).

    I don't have a straightforward answer for you, but I think you'll have to implement your own custom ViewNavigator mechanism (extending ViewNavigator to leverage existing useful methods and override others).