【问题标题】:How to change view on the right view with SplitViewNavigator Flex 4.6如何使用 SplitView Navigation Flex 4.6 更改右侧视图的视图
【发布时间】:2012-05-19 01:42:30
【问题描述】:

我正在使用 Flex 4.6 创建一个移动应用程序,并且我正在使用带有选项卡式应用程序的 SplitViewNavigator。我有一个永远不会改变的左视图,它有一个与之关联的静态列表。我对SplitViewNavigator 的右侧面板有多个视图。我可以加载左视图和第一个右视图,但不知道在从左视图的列表中进行选择后如何更改右视图的视图。

我的主应用程序文件有以下代码来加载拆分视图并显示左视图和右视图。

<s:SplitViewNavigator id="svn" width="100%" height="100%">
    <s:ViewNavigator id="leftNav" width="30%" height="100%" firstView="views.LeftView"/>
    <s:ViewNavigator id="rightNav" width="70%" height="100%" firstView="views.RightView1"/>
</s:SplitViewNavigator>

我的左视图只有一个简单的列表,我可以确定选择了哪个项目,但我不知道如何更改右视图。假设右视图只是称为 RightView1、RightView2 等。

我假设我需要使用 pushView 方法,但不知道如何从 leftView 视图引用主应用程序文件中的右视图 ID (rightNav)。但我可能会离开这里,所以任何帮助都将不胜感激。

干杯,

【问题讨论】:

    标签: apache-flex view split views navigator


    【解决方案1】:

    你可以尝试做这样的事情:

    Main.mxml

    <?xml version="1.0" encoding="utf-8"?>
    <s:TabbedViewNavigatorApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                                      xmlns:s="library://ns.adobe.com/flex/spark"
                                      applicationDPI="160"
                                      creationComplete="this_creationCompleteHandler(event)"
                                      >
        <fx:Script>
            <![CDATA[
                import events.ViewEvent;
    
                import mx.events.FlexEvent;
    
                import views.RightView1;
    
                protected function this_creationCompleteHandler(event:FlexEvent):void
                {
                    leftNav.addEventListener(ViewEvent.CHANGE_VIEW, leftNav_changeViewHandler);
                }
    
                protected function leftNav_changeViewHandler(event:ViewEvent):void
                {
                    rightNav.pushView(event.view);
                }
    
            ]]>
        </fx:Script>
    
        <s:SplitViewNavigator id="svn" width="100%" height="100%">
            <s:ViewNavigator id="leftNav" width="30%" height="100%" firstView="views.LeftView"  />
            <s:ViewNavigator id="rightNav" width="70%" height="100%" firstView="views.RightView1"/>
        </s:SplitViewNavigator>
    </s:TabbedViewNavigatorApplication>
    

    LeftView.mxml

    <?xml version="1.0" encoding="utf-8"?>
    <s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
            xmlns:s="library://ns.adobe.com/flex/spark"
            title="LeftView">
    
        <fx:Script>
            <![CDATA[
                import events.ViewEvent;
    
                import mx.collections.ArrayCollection;
    
                import spark.events.IndexChangeEvent;
    
                private function labelFunc(item:Object):String
                {
                    return getQualifiedClassName(item).split("::")[1];
                }
    
                protected function list_changeHandler(event:IndexChangeEvent):void
                {
                    dispatchEvent(new ViewEvent(ViewEvent.CHANGE_VIEW, list.selectedItem as Class, true));
                }
    
            ]]>
        </fx:Script>
        <s:List id="list" height="100%" width="100%"
                dataProvider="{new ArrayCollection([RightView1, RightView2, RightView3])}"
                labelFunction="labelFunc"
                change="list_changeHandler(event)">
    
        </s:List>
    </s:View>
    

    ViewEvent.as

    package events
    {
        import flash.events.Event;
    
        public class ViewEvent extends Event
        {
    
            public static const CHANGE_VIEW:String = "changeView";
    
            public function ViewEvent(type:String, view:Class, bubbles:Boolean=false, cancelable:Boolean=false)
            {
                super(type, bubbles, cancelable);
    
                this.view = view;
            }
    
            public var view:Class;
    
            override public function clone():Event
            {
                return new ViewEvent(type, view, bubbles, cancelable);
            }
        }
    }
    

    这对我有用,但我不喜欢this_creationCompleteHandler 参与Main.mxml,如何捕捉ViewEvent 取决于您。希望这能有所帮助。

    【讨论】:

    • 感谢艺术作品。我做了一些小的改动以匹配我的确切情况。似乎很多代码只是为了改变视图。是我自己还是 Adob​​e 让事情变得过于复杂。干杯,
    • @user1332657 好吧,也许有更简单的方法可以实现这一点。至少您可以使用 LeftView 而不是 leftNav ViewNavigator(甚至列表本身)并直接在 Main 类中捕获列表更改事件。它将减少代码,但增加类之间的关联。
    • 感谢 Art 我确实考虑将左视图放在我的主类中,但我喜欢将所有视图分开以进行调试和混乱。你的场景对我来说非常有效,我真的很感激。我只是在评论说,对任何应用程序来说如此重要的事情做起来是如此复杂。
    • 感谢艺术!好方法 本页的另一个例子(文末):devgirl.org/2011/12/01/… 完整应用下载:devgirl.org/files/RIAUnleashed
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多