Flex TabNavigator:当离开并返回屏幕时,selectChild已设置,但是标签栏突出显示错误的选项卡

时间:2010-01-23 23:26:15

标签: flex

我有一个TabNavigator,有一些孩子。应用程序的流程允许用户使用此TabNavigator离开屏幕,然后返回。发生这种情况时,显示父画布的方法会将selectedChild设置为第一个选项卡。实际测试时,TabNavigator返回显示第一个选项卡上的文本,但突出显示的选项卡是用户在离开之前所处的任何选项卡。

这是一些伪代码看起来像我的东西:

<mx:Canvas show="init()">
<mx:Script>
<![CDATA[
    private function init():void {
        menutabs.selectedChild = tab1;
    }
 ]]>
</mx:Script>
<mx:TabNavigator id="menutabs">
    <mx:VBox id="tab1" label="Tab 1"><mx:Label text="First Tab Text" /></mx:VBox>
    <mx:VBox id="tab2" label="Tab 2"><mx:Label text="Second Tab Text" /></mx:VBox>
    <mx:VBox id="tab3" label="Tab 3"><mx:Label text="Third Tab Text" /></mx:VBox>
</mx:TabNavigator>
</mx:Canvas>

所以我正在经历的,例如,使用应用程序进入另一个画布,已经在Tab 2上,然后返回到此画布以查看文本“First Tab Text”,但顶部突出显示的选项卡是“标签2.“我在invalidateDisplayList,validateNow等的init()方法中尝试了一些变体,结果没有变化。

欢迎任何想法。

3 个答案:

答案 0 :(得分:1)

这是同一个问题in this question 我也遇到了同样的问题,它似乎是Flex框架的TabNavigator控件中的一个错误。我还没有找到解决方案。

我设法找到了一个临时解决方法:

  • TabNavigator的父级,称为父级,当父级时,应该在 TabNavigator 上发送一个额外的隐藏事件 visibility设置为false并在 Parent 上调度hide事件。这将触发重新绘制控件,从而消除重叠的内容区域。
  • 应在父母的隐藏处理程序中将 TabNavigator selectedIndex重置为0。
  • 如果您在可见性更改时遇到 TabNavigator 标签样式问题,则可以使用 tabNavigator 的show handler中的tabNavigator.notifyStyleChangeInChildren('tabStyleName',false)正确重绘标签样式。

我希望这些足以涵盖您的案件。

答案 1 :(得分:0)

您是否观察到'selectedChild'是ViewStack的实际属性,而不是TabNavigator? 由于TabNavigator可以被视为ViewStack + TabBar,因此设置selectedChild对TabBar没有影响。

我建议使用'selectedIndex'而不是设置selectedChild。您可以使用getChildIndex()

从Container本身获取selectedIndex

答案 2 :(得分:0)

我遗漏了一些信息。我的init()方法不仅仅是selectedChild,我认为其他的东西,不一定每次都需要运行,是搞砸重新绘制标签的原因。所以我创建了一个新的goHomeTab()方法来调用show,并仅在初始化时调用我的init()方法。现在一切似乎都很好。感谢。