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;
		}
	}
}


你可能感兴趣的:(Web,Flash,Flex,RIA,TabNavigator)