проблема с flex 4 mobile с состояниями ViewNavigatorApplication и firstView - PullRequest
1 голос
/ 17 мая 2011

У меня нет опыта в создании моего первого мобильного приложения Flex (хотя я не новичок во Flex), и я споткнулся о первое препятствие.

Я не могу получить ViewNavigatorApplication для отображения представления при попытке использовать firstView с состояниями, например. firstView.phone , firstView.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 ]

2 голосов
/ 07 ноября 2012

В конце концов, я отправил комментарий @ 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>

Я помещаю код в первый экран, чтобы определить, является ли устройство телефоном / планшетом, и перенаправить на соответствующий экран:

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

Спасибо за ваши предложения, ребята: -)

1 голос
/ 13 мая 2012

Запись состояний внутри представлений, не входящих в viewNavigatorApplication (Определяет основной файл приложения. Контейнер ViewNavigatorApplication не принимает дочерние элементы.)

0 голосов
/ 18 июля 2011

Может быть, вы можете попробовать установить свойство firstView из actionscrtip после вычисления размера экрана. Просто убедитесь, что вы делаете это в событии preinitialize. В противном случае это не сработает.

0 голосов
/ 17 мая 2011

Зачем вам нужны состояния в навигаторе представлений, если сами представления являются состояниями? Я вполне уверен, что он не предназначен для использования таким образом, и что невозможно «загрузить» новое представление через первое представление. Просто установите firstView и после того, как он загрузится и переключите представления соответственно.

Если вы хотите сделать что-то «изменяющее размер», я бы добавил код изменения размера к каждому представлению. или имеют отдельное приложение для каждого форм-фактора, чтобы улучшить работу при повторном использовании кода (это мой предпочтительный метод).

...