关于TabNavigator动态removeAllChildren之后selectedIndex设置失效的解决办法。
调查发现,当remove所有的tab,再动态创建新的tab后,selectedIndex的设置就会失效。所以要保证TabNavigator在remove时至少要保持一个tab存在。
下面是一个简单的小例子:
<?xml version="1.0"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" verticalAlign="middle" backgroundColor="white"> <mx:Script> <![CDATA[ import mx.containers.VBox; public var _num:int = 0; // tab数 /* * 重置:移去当前所有tab,重置两个新的tab */ private function remove():void { // tab页存在的情况下 if ( _num > 0 ) { // 新建一个临时tab页 并把它加到TabNavigator的最前面。 var tempVbox:VBox = new VBox; tabs.addChildAt( tempVbox, 0 ); // remove除了临时tab页之外的所有tab for ( var i:int = _num; i > 0; i-- ) { tabs.removeChildAt( i ); } // 重置tab数 _num = 0; } // 新建2个tab reset( 2 ); // remove临时tab tabs.removeChildAt( 0 ); // 设置选中页 tabs.selectedIndex = 0; } /* * 新建num个tab */ private function reset( num:int = 1 ):void { for ( var i:int = 0; i < num; i++) { var vbox:VBox = new VBox; vbox.label = "Panel " + (_num + 1).toString(); tabs.addChild( vbox ); _num++; } } ]]> </mx:Script> <mx:Button label="重置" click="remove()"/> <mx:Button label="新建" click="reset()"/> <mx:TabNavigator id="tabs" width="500" height="200"/> </mx:Application>