Apache flex flex 4移动版存在ViewNavigator应用程序状态和firstView问题

Apache flex flex 4移动版存在ViewNavigator应用程序状态和firstView问题,apache-flex,flex4.5,Apache Flex,Flex4.5,我正在尝试制作我的第一个Flex移动应用程序(虽然我对Flex并不陌生),但我在第一个障碍上就绊倒了 在尝试将firstView与状态(例如firstView.phone、firstView.tablet)一起使用时,我无法使ViewNavigatorApplication显示视图 我只剩下一个空白的操作栏和内容区 如果我尝试将firstView设置为无状态(例如firstView=“view.HomeView”),则视图加载良好 代码如下: <s:ViewNavigatorApplica

我正在尝试制作我的第一个Flex移动应用程序(虽然我对Flex并不陌生),但我在第一个障碍上就绊倒了

在尝试将firstView与状态(例如firstView.phone、firstView.tablet)一起使用时,我无法使ViewNavigatorApplication显示视图

我只剩下一个空白的操作栏和内容区

如果我尝试将firstView设置为无状态(例如firstView=“view.HomeView”),则视图加载良好

代码如下:

<s:ViewNavigatorApplication
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    firstView.phone="views.HomeView"
    firstView.tablet="views.TabletHomeView"
    applicationDPI="160" 
    creationComplete="initApplication()">
    <s:states>
        <s:State name="portraitPhone" stateGroups="portrait, phone"/>
        <s:State name="landscapePhone" stateGroups="landscape, phone"/>
        <s:State name="portraitTablet" stateGroups="portrait, tablet"/>
        <s:State name="landscapeTablet" stateGroups="landscape, tablet"/>
    </s:states>
    <fx:Style source="assets/css/application.css"/>
    <fx:Script>
        <![CDATA[
            import mx.events.ResizeEvent;

            private var isPortrait:Boolean;
            private var isTablet:Boolean;

            private function initApplication():void
            {               
                addEventListener(ResizeEvent.RESIZE, resizeHandler);
                addEventListener(Event.ADDED_TO_STAGE, resizeHandler);
            }

            private function resizeHandler(event:*):void
            {
                isPortrait = (stage.height > stage.width);
                isTablet = (stage.height > 950 || stage.width > 950);

                currentState = (isPortrait ? "portrait" : "landscape") + (isTablet ? "Tablet" : "Phone");
            }
        ]]>
    </fx:Script>
</s:ViewNavigatorApplication>

舞台宽度);
iStable=(stage.height>950 | | stage.width>950);
当前状态=(iPortrait?“肖像”:“风景”)+(isTablet?“平板”:“手机”);
}
]]>
我已经在谷歌上搜索到了这个问题,读了一遍,没有发现其他人有这个问题,也没有任何证据表明我只是做错了(尽管我仍然怀疑是这样的)


提前谢谢

如果视图本身是状态,为什么要在视图导航器中包含状态?我相当确定它不应该这样使用,也不可能通过first view“加载”新视图。只需设置firstView并在加载后相应地切换视图


如果您想做一些“调整大小”的事情,我会将调整大小的代码添加到每个视图中,或者为每个形状因子提供一个单独的应用程序,以便在重用代码时提供更好的体验(这是我的首选方法)。

也许您可以在计算屏幕大小后尝试从actionscrtip设置firstView属性。只需确保在预初始化事件中这样做。否则它将无法工作。

在视图中写入状态,而不是在viewNavigatorApplication中(定义主应用程序文件。viewNavigatorApplication容器不包含任何子项)。

最后,我使用了@www.Flextras.com注释[不作为答案输入]:


我还在学习,但如果我明白了,你不会想的 在ViewNavigatorApplication中创建这样的状态。这只是一个小问题 实质上是虚拟容器。在视图中创建这样的状态

我清空了ViewNavigator应用程序中的所有状态&代码如下:

<?xml version="1.0" encoding="utf-8"?>
<s:ViewNavigatorApplication 
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark"
    applicationDPI="160"
    splashScreenImage="com.mis.editor.mobile.sire.components.DynamicSplash"
    runtimeDPIProvider="com.mis.editor.mobile.helpers.RuntimeDPIHelper"
    firstView="SplashView">
    <fx:Style source="com/mis/editor/mobile/sire/assets/css/application.css"/>
</s:ViewNavigatorApplication>

谢谢你们的建议,伙计们:-)

我还在学习自己,但如果我明白了,你不会希望在ViewNavigator应用程序中创建这样的状态。本质上,它只是一个虚拟容器。在视图中创建这样的状态。如果您不确定答案的正确性,请将其作为注释而不是答案发布。
protected function push_login():void
{           
    var fadeTrans:CrossFadeViewTransition = new CrossFadeViewTransition();

    if(ScreenDetails.Format == 'phone')
    {
        navigator.pushView(PhoneLoginView, appDataMediator, null, fadeTrans);
    }
    else
    {
        navigator.pushView(LoginView, appDataMediator, null, fadeTrans);
    }           
}