首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >限制ViewStack问题中的子级数

限制ViewStack问题中的子级数
EN

Stack Overflow用户
提问于 2012-03-07 09:26:37
回答 1查看 384关注 0票数 0

我有以下代码来创建一个ViewStack,它用作TabBar的数据提供程序:

代码语言:javascript
复制
    <s:TabBar id="objectTab" dataProvider="{vs_objects}"/>
       <mx:ViewStack id="vs_objects" width="100%" />

当用户打开多个选项卡而不关闭任何选项卡时,我希望限制ViewStack的子级数量,以避免选项卡从屏幕上消失。当用户打开一个新的选项卡,并且ViewStack的大小在9以上时,我尝试删除ViewStack中最古老的元素。

代码语言:javascript
复制
private function openTab(object:Object): void {
  //Create a new NavigatorContent(form) and add it to the ViewStack
  ........
  vs_objects.addChild(form);
  if(vs_objects.numChildren > 9) {
    vs_objects.removeChildAt(0);     
  }
  //vs_objects.selectedChild = form;
  vs_objects.selectedIndex = (vs_Tiltaksbanken.numChildren -1);
}

下面的图片说明了我的问题,深灰色的颜色显示了所选的选项卡。应该只有一个被选中的选项卡,当我在选择新选项之前不移除一个子选项时,这两个子选项卡都可以很好地工作。当我移除一个子选项卡,然后打开一个新标签时,新标签没有正确地被选中,它只能在选定的颜色中得到“绘制”。在本例中,当我打开Tab 41 (超过9个选项卡)时,仍然会显示Tab 40。此问题的结果是Tab 41未被完全呈现。

有谁知道我如何解决这个问题,或者有一种不同的方法来限制Tab/ViewStack-子类的数量?

UPDATE:问题是孩子们NavigatorContent中的AS3代码导致了应用程序的这种行为。解决方案是使用callLater方法:

解决我的问题的解决方案是使用callLater方法,如下所示,使用Adnan Doric的代码示例:

代码语言:javascript
复制
 protected function openTab():void
 {
    var form:Container = new Container();
    form.name = "Tab " + counter++;
    vs_objects.addChild(form);
    vs_objects.selectedChild = form;
    callLater(removeTab);
 }
 private function removeTab(): void {
    if (vs_objects.numElements > 10)
      vs_objects.removeElementAt(0);
 }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-07 12:35:51

尝试一下,即使我不确定这是正确的解决方案,也许最好实现某种滚动。

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">

    <fx:Script>
        <![CDATA[
            import mx.core.Container;

            private var counter:int = 1;

            protected function openTab():void
            {
                var form:Container = new Container();
                form.name = "Tab " + counter++;
                vs_objects.addChild(form);
                if (vs_objects.numElements > 10)
                    vs_objects.removeElementAt(0);
                vs_objects.selectedChild = form;
            }

        ]]>
    </fx:Script>

    <s:TabBar id="objectTab" top="32" labelField="name" dataProvider="{vs_objects}"/>
    <mx:ViewStack id="vs_objects" width="100%" />
    <s:Button label="addTab" click="openTab()" />
</s:Application>

希望有帮助:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9598736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档