Flex TabNavigator 动态增删tab 后的bug (tab选择状态错误)

最近用到Flex的TabNavigator控件,它需要动态的增删Children,当删除所有的Children再添加两个以上Children时就出现了bug,即上一次tab选择状态会保留下来,即使你设置selectedIndex为0,上一次选的是1它选择状态还会是1,这在用户体验上是绝对不友好的。网上没有搜索到解决办法,只好研究其源代码了,并最终找到了解决方案,把我自己写的继承的这个TabNavigator控件附上,希望对大家有帮助:

注释也写的很清楚

package common.containers
{
import flash.display.DisplayObject;
import mx.containers.TabNavigator;

/**
* 本身的TabNavigator在更新本身时候不能更新TabBar,所以自己覆盖了一下
* @author Pursuit
*
*/
public class MyTabNavigator extends TabNavigator
{
public function MyTabNavigator()
{
super();
}
/**
*设置为null很重要,否则TabBar保存了状态而ViewStack却没有,
*造成不 一致,给用户造成误解
*
*/   
override public function removeAllChildren():void
{
super.removeAllChildren();
tabBar.dataProvider=null; //否则下一次添加时,其tabBar不在更新了
}

/**
* 重写此方法,目的是可以更新TabNavigator的tabBar控件,让其选择状态正确显示
* @param child
* @param index
* @return
*/ 
override public function addChildAt(child:DisplayObject,index:int):DisplayObject
{
super.addChildAt(child, index);
commitProperties(); //更新tabBar
return child;
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值