1

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

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

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

如果我尝试设置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>

我已经用谷歌搜索死了,阅读了ViewNavigatorApplication规范,没有发现其他人有这个问题或任何证据表明我只是做错了(尽管我仍然怀疑是这种情况)。

提前致谢!

4

4 回答 4

2

最后,我选择了@www.Flextras.com 评论 [不作为答案]:

我还在学习自己,但如果我理解的话,你不想在 ViewNavigatorApplication 中创建这样的状态。本质上,它只是一个虚拟容器。在视图中创建这样的状态。

我清空了所有状态的 ViewNavigatorApplication 和代码,如下所示:

<?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>

我将代码放在第一个视图中以检测设备是否是手机/平板电脑并重定向到适当的视图:

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);
    }           
}

感谢您的建议伙计们:-)

于 2012-11-07T09:32:50.083 回答
1

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

于 2012-05-13T07:05:28.273 回答
0

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

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

于 2011-05-17T12:59:04.170 回答
0

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

于 2011-07-18T13:20:48.843 回答