Whenever I set a indeterminate progress bar in a modal pop-up via PopUpManager, there is no progress displayed. If I add the same ProgressBar to the parent regularly or make the pop-up non-modal it works. Is there a reason why it doesn't work in modal pop-ups? and a way to make it work?
每当我通过PopUpManager在模态弹出窗口中设置不确定的进度条时,都不会显示任何进度。如果我定期向父母添加相同的ProgressBar或使弹出非模态,它可以工作。有没有理由说它在模态弹出窗口中不起作用?以及使其有效的方法?
Thanks.
4 个解决方案
#1
I have had some other developers look at this, it turns out it is a bug, but there is a work around..I'll post my original code and then the altered code for the work around:
我有其他一些开发人员看这个,结果证明这是一个bug,但有一个解决方法..我会发布我原来的代码,然后改变代码来解决这个问题:
original:
private function showLoading(e:Event = null):void
{
if(_progBar == null)
{
_progBar = new ProgressBar();
_progBar.width = 200;
_progBar.indeterminate = true;
_progBar.labelPlacement = 'center';
_progBar.setStyle("removedEffect", fade);
_progBar.setStyle("addedEffect", fade);
_progBar.setStyle("color", 0xFFFFFF);
_progBar.setStyle("borderColor", 0x000000);
_progBar.setStyle("barColor", 0xf4b60f);
_progBar.label = "";
}
PopUpManager.addPopUp(_progBar,this,true);
PopUpManager.centerPopUp(_progBar);
}
work around:
private function showLoading(e:Event = null):void
{
if(_progBar == null)
{
_progBar = new ProgressBar();
_progBar.width = 200;
_progBar.indeterminate = true;
_progBar.labelPlacement = 'center';
_progBar.setStyle("removedEffect", fade);
_progBar.setStyle("addedEffect", fade);
_progBar.setStyle("color", 0xFFFFFF);
_progBar.setStyle("borderColor", 0x000000);
_progBar.setStyle("barColor", 0xf4b60f);
_progBar.label = "";
_progBar.mode = ProgressBarMode.MANUAL;
}
PopUpManager.addPopUp(_progBar,this,true);
PopUpManager.centerPopUp(_progBar);
_progBar.setProgress(0, 0);
}
#2
We can do this by using containter.addChild(Pg) eg.Canvas and then use PopUpManager.
我们可以通过使用containter.addChild(Pg)eg.Canvas然后使用PopUpManager来实现。
#3
I had the same problem, but neither of the other solutions helped. Below is the code that produces the problem for me:
我有同样的问题,但其他解决方案都没有帮助。以下是为我产生问题的代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" applicationComplete="applicationComplete();">
<mx:Script><![CDATA[
import mx.controls.ProgressBar;
import mx.managers.PopUpManager;
private function applicationComplete():void
{
var progressBar:ProgressBar = new ProgressBar()
progressBar.indeterminate = true;
PopUpManager.addPopUp(progressBar, this, true);
//this.addChild(progressBar); including this line overrides the popup
//progressBar.setProgress(0, 0); including this line makes no difference
}
]]></mx:Script>
<mx:Label text="hello"/>
</mx:Application>
The two commented out lines are what I understood to be the other suggested solutions. I managed to fix this using the awkward workaround below:
两条注释掉的线条是我所理解的其他建议的解决方案。我设法使用下面的尴尬解决方法解决了这个问题:
Step 1: Create custom mxml component, saved as Progress.mxml
步骤1:创建自定义mxml组件,保存为Progress.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:ProgressBar indeterminate="true" />
</mx:TitleWindow>
Step 2: Use custom component in code
第2步:在代码中使用自定义组件
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" applicationComplete="applicationComplete();">
<mx:Script><![CDATA[
import mx.controls.ProgressBar;
import mx.managers.PopUpManager;
import Progress;
private function applicationComplete():void
{
var progress:Progress = new Progress();
PopUpManager.addPopUp(progress, this, true);
PopUpManager.centerPopUp(progress);
}
]]></mx:Script>
<mx:Label text="hello"/>
</mx:Application>
It seems that putting the ProgressBar inside the TitleWindow is important.
似乎将ProgressBar放在TitleWindow中很重要。
#4
It worked for me once I put the ProgressBar inside a TitleWindow. For instance, this was not working:
一旦我将ProgressBar放在TitleWindow中,它对我有用。例如,这不起作用:
var waitingpopup:ProgressBar = new ProgressBar();
waitingpopup.indeterminate = true;
waitingpopup.label = "Please wait, loading...";
PopUpManager.addPopUp(waitingpopup, this, true);
And this worked
这很有效
var waitingpopup:TitleWindow = new TitleWindow();
waitingpopup.title = "Please Wait";
var pb:ProgressBar = new ProgressBar();
pb.indeterminate = true;
pb.label = "Loading...";
waitingpopup.addChild(pb);
PopUpManager.addPopUp(waitingpopup, this, true);
#1
I have had some other developers look at this, it turns out it is a bug, but there is a work around..I'll post my original code and then the altered code for the work around:
我有其他一些开发人员看这个,结果证明这是一个bug,但有一个解决方法..我会发布我原来的代码,然后改变代码来解决这个问题:
original:
private function showLoading(e:Event = null):void
{
if(_progBar == null)
{
_progBar = new ProgressBar();
_progBar.width = 200;
_progBar.indeterminate = true;
_progBar.labelPlacement = 'center';
_progBar.setStyle("removedEffect", fade);
_progBar.setStyle("addedEffect", fade);
_progBar.setStyle("color", 0xFFFFFF);
_progBar.setStyle("borderColor", 0x000000);
_progBar.setStyle("barColor", 0xf4b60f);
_progBar.label = "";
}
PopUpManager.addPopUp(_progBar,this,true);
PopUpManager.centerPopUp(_progBar);
}
work around:
private function showLoading(e:Event = null):void
{
if(_progBar == null)
{
_progBar = new ProgressBar();
_progBar.width = 200;
_progBar.indeterminate = true;
_progBar.labelPlacement = 'center';
_progBar.setStyle("removedEffect", fade);
_progBar.setStyle("addedEffect", fade);
_progBar.setStyle("color", 0xFFFFFF);
_progBar.setStyle("borderColor", 0x000000);
_progBar.setStyle("barColor", 0xf4b60f);
_progBar.label = "";
_progBar.mode = ProgressBarMode.MANUAL;
}
PopUpManager.addPopUp(_progBar,this,true);
PopUpManager.centerPopUp(_progBar);
_progBar.setProgress(0, 0);
}
#2
We can do this by using containter.addChild(Pg) eg.Canvas and then use PopUpManager.
我们可以通过使用containter.addChild(Pg)eg.Canvas然后使用PopUpManager来实现。
#3
I had the same problem, but neither of the other solutions helped. Below is the code that produces the problem for me:
我有同样的问题,但其他解决方案都没有帮助。以下是为我产生问题的代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" applicationComplete="applicationComplete();">
<mx:Script><![CDATA[
import mx.controls.ProgressBar;
import mx.managers.PopUpManager;
private function applicationComplete():void
{
var progressBar:ProgressBar = new ProgressBar()
progressBar.indeterminate = true;
PopUpManager.addPopUp(progressBar, this, true);
//this.addChild(progressBar); including this line overrides the popup
//progressBar.setProgress(0, 0); including this line makes no difference
}
]]></mx:Script>
<mx:Label text="hello"/>
</mx:Application>
The two commented out lines are what I understood to be the other suggested solutions. I managed to fix this using the awkward workaround below:
两条注释掉的线条是我所理解的其他建议的解决方案。我设法使用下面的尴尬解决方法解决了这个问题:
Step 1: Create custom mxml component, saved as Progress.mxml
步骤1:创建自定义mxml组件,保存为Progress.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:ProgressBar indeterminate="true" />
</mx:TitleWindow>
Step 2: Use custom component in code
第2步:在代码中使用自定义组件
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" applicationComplete="applicationComplete();">
<mx:Script><![CDATA[
import mx.controls.ProgressBar;
import mx.managers.PopUpManager;
import Progress;
private function applicationComplete():void
{
var progress:Progress = new Progress();
PopUpManager.addPopUp(progress, this, true);
PopUpManager.centerPopUp(progress);
}
]]></mx:Script>
<mx:Label text="hello"/>
</mx:Application>
It seems that putting the ProgressBar inside the TitleWindow is important.
似乎将ProgressBar放在TitleWindow中很重要。
#4
It worked for me once I put the ProgressBar inside a TitleWindow. For instance, this was not working:
一旦我将ProgressBar放在TitleWindow中,它对我有用。例如,这不起作用:
var waitingpopup:ProgressBar = new ProgressBar();
waitingpopup.indeterminate = true;
waitingpopup.label = "Please wait, loading...";
PopUpManager.addPopUp(waitingpopup, this, true);
And this worked
这很有效
var waitingpopup:TitleWindow = new TitleWindow();
waitingpopup.title = "Please Wait";
var pb:ProgressBar = new ProgressBar();
pb.indeterminate = true;
pb.label = "Loading...";
waitingpopup.addChild(pb);
PopUpManager.addPopUp(waitingpopup, this, true);