Flex:模态弹出中的不确定ProgressBar?

时间:2009-04-22 18:07:16

标签: flex progress-bar modal-dialog

每当我通过PopUpManager在模态弹出窗口中设置不确定的进度条时,都不会显示任何进度。如果我定期向父母添加相同的ProgressBar,或者使弹出非模态,它可以工作。有没有理由说它在模态弹出窗口中不起作用?以及使其有效的方法吗?

感谢。

4 个答案:

答案 0 :(得分:1)

我有其他一些开发人员看这个,结果证明这是一个错误,但有一个解决方法..我会发布我的原始代码,然后改变代码来解决这个问题:

原:

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

解决方法:

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

答案 1 :(得分:0)

我们可以通过使用container.addChild(Pg)eg.Canvas然后使用PopUpManager来实现。

答案 2 :(得分:0)

我遇到了同样的问题,但其他解决方案都没有帮助。以下是为我产生问题的代码:

<?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>

这两条注释掉的行是我所理解的其他建议的解决方案。我设法使用下面的尴尬解决方法解决了这个问题:

步骤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>

第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>

似乎将ProgressBar放在TitleWindow中非常重要。

答案 3 :(得分:0)

一旦我将ProgressBar放在TitleWindow中,它对我有用。例如,这不起作用:

var waitingpopup:ProgressBar = new ProgressBar();
waitingpopup.indeterminate = true;
waitingpopup.label = "Please wait, loading...";    
PopUpManager.addPopUp(waitingpopup, this, true);

这很有效

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