Flash AS3中的Astra TabBar难度

时间:2011-10-24 15:37:49

标签: actionscript-3 tabs flash-cs5 tabbar yahoo-astra

我很难让Astra TabBar做任何事情,除了能够传入我的DataProvider数组。我试图在单击选项卡时使用CHANGE事件跟踪“单击”。什么都没发生,我不知道为什么。 有没有人有这方面的经验,拜托?我的代码如下所示:

package
{
import com.yahoo.astra.fl.controls.TabBar;
import com.yahoo.astra.fl.events.TabBarEvent;
public class TabBar extends Window
{
public var tabBarGpl:TabBar;
private function displayInit():void
{
var tabBarData:Array = new Array(
"Tab one",
"Tab two",
"Tab three",
"Tab four"
);
var tabBarGpl:TabBar = new TabBar();
tabBarGpl.dataProvider = new DataProvider(tabBarData);
tabBarGpl.selectedIndex = 0;
tabBarGpl.move(-230.95, -127.65);
this.addChild(tabBarGpl);
}
private function handleEvent(event:Event):void
{
var i:int;
switch (event.type)
{
case Event.ADDED_TO_STAGE :
displayInit();
removeEventListener(Event.ADDED_TO_STAGE, handleEvent);
addEventListener(Event.REMOVED_FROM_STAGE, handleEvent, false, 0, true);
this.tabBarGpl.addEventListener(Event.CHANGE, onTabBarClick);
}
}
private function onTabBArClick(event:Event):void
{
trace("tab bar clicked");
}
}
}

而且......没什么。我在4个选项卡上看到TabBar和我的数据,但输出中没有trace语句。任何意见将是有益的。谢谢!

1 个答案:

答案 0 :(得分:0)

我没有使用Astra TabBar的经验,但它看起来像你最初没有调用handleEvent()函数。在实例化类时,需要为其添加一个侦听器。如果未调用handleEvent(),则永远不会添加单击侦听器,您将看不到单击。

public function TabBar() { //constructor function
    addEventListener(Event.ADDED_TO_STAGE, handleEvent);
}

另外,我不确定你要做的是什么,但你似乎在为你创建的每个TabBar实例添加一个新的TabBar。

var tabBarGpl:TabBar = new TabBar();
tabBarGpl.dataProvider = new DataProvider(tabBarData);
tabBarGpl.selectedIndex = 0;
tabBarGpl.move(-230.95, -127.65);
this.addChild(tabBarGpl);

此处的关键字“this”将引用您的TabBar实例,并可能导致此类无限地将新TabBars添加到现有TabBars。