flex中如何在初始化中使用stage

最近做新的分组主题页面自适应时遇到一个问题,初始话中使用stage报空对象。

研究了一下flex的初始化顺序好,发现原因主要跟 Application 四大初始化事件有关,必须弄清楚这四个事件。

这里大概说一下 这四个初始化事件到底什么情况下分派(其实 Application 初始化是一个很复杂的过程,这里就省略这些部分了)

四大初始化事件:preinitialize,initialize,creationComplete,apllicationComplete

1. preinitialize 的分派

应用程序 application 已实例化,但此时还未创建任何相关的孩子组件(child component),但是此时 application可获取孩子数。

2. initialize 的分派

此时,创建了相应的孩子组件,但还未对这些子组件进行布局。

3. creationComplete 的分派

应用程序application完成全部实例化,并完成所有子组件的布局

4. apllicationComplete 的分派

上面三处事件的完成,表明application内部启动的整个进程完成,就把 Application实例加入舞台(stage),接下来便会通知SystemManager派发applicationComplete事件。此时,启动程序启动完成并准备运行。

所有 在  applicaiton 的 preinitialize,initialize,creationComplete 事件处理函数里面 获取 stage,  这样肯定是null, 此时applicaiton实例还没有加入 stage,Application实例加入到舞台后,派发ApplicationComplete事件。所以,应该在ApplicationComplete 事件派发后获取 stage。

 

另外,在网上搜了一下,同样有两种解决办法(项目实际应用中均不行,使用上面的方法才可以)供参考:

1.       调用callLater方法,如下: 
<mx:Application  creationComplete="callLater(init)" 
我们在creationComplete事件里,使用callLater(init)来调用init,那么再init中调用stage就不是null了 

2.    主要是如果stage为null则添加Event.ADDED_TO_STAGE事件的监听,就ok了 
如下 

你可能感兴趣的:(flex中如何在初始化中使用stage)