在FlexScript移动应用程序的Actionscript中预加载动态创建的视图

时间:2012-07-03 15:06:30

标签: actionscript-3 flex air flex4.5 flex-mobile

我遇到了以下问题,我的老板希望我在切换视图之间没有任何等待时间的情况下使我们的应用程序响应更快。它习惯于基于ViewNavigator的“标准”应用程序,但只有一个View被销毁,并根据用户自己创建的标签选择,使用不同的内容重新创建。视图已使用默认SlideViewTransition切换。我现在已经下半秒了,如下所述采用略微更轻量级的方法,但是半秒还是太多了。

该应用程序是一个标签式应用程序,用户可以自己创建和编辑新视图,因此创建/编辑/删除选项卡及其相应的选项卡。 我当前的实现基于ButtonBarGroup,用于显示“视图”。该组的内容基于所选选项卡创建。内容基于XML数据,该数据存储构建“视图”所需的所有信息。当然,删除和创建组件需要一段时间(我谈到的半秒),所以我接着是另一个解决方案。

我想到的是使用ViewNavigator并在应用程序启动时创建所有存储的视图。

非常喜欢这样:

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是一个ArrayList,用于存储创建的视图。

我现在唯一的问题是我不能在相应的View中使用存储在此ArrayList中的ViewNavigator

我按常规方式尝试,即navigation.pushView(_viewCreator.views.getItemAt(0) as Class); 然而,这不起作用,没有错误或任何事情,ViewNavigator只是没有做任何事情,所以我想不能像这样创建View类。

那么我怎样才能做到这一点? 另外,你们是否认为这是解决问题的正确方法,特别是考虑到应用程序的整个动态特性(基于选项卡)? 当然,滑动过渡将完全禁用,因为它们对于我们复杂的组件来说非常慢。

非常感谢任何帮助,评论或想法!

编辑: 第二个想法,只需使用Groups代替ViewNavigatorView,就可以使它更轻一些,并解决视图未被推送的问题。

1 个答案:

答案 0 :(得分:0)

实际上ViewNavigator pushView()是一种创建给定Class(方法参数)实例的机制。

对于所有导航历史记录,ViewNavigator使用NavigationStack个对象来存储相关值(您也可以自定义)。

我没有直截了当的答案,但我认为您必须实施自己的自定义ViewNavigator机制(扩展ViewNavigator以利用现有的有用方法并覆盖其他方法。)< / p>