关于TabNavigator动态removeAllChildren之后selectedIndex设置失效的解决办法。
调查发现,当remove所有的tab,再动态创建新的tab后,selectedIndex的设置就会失效。所以要保证TabNavigator在remove时至少要保持一个tab存在。
下面是一个简单的小例子:
调查发现,当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>