2010-09-25 38 views
1

我想創建一個進度條列表並相應地更新列表。 我有組數據中數組作爲使用itemrenderer顯示柔性進度條列表

<mx:Array id="arr"> 
     <mx:Object label="Group One" min="0" max="200" currentValue="60" /> 
     <mx:Object label="Group Two" min="0" max="300" currentValue="50" /> 
</mx:Array> 

在陣列對象中的數值表示基團,最小值,最大值和當前值 的名稱(在進度被使用)的基團。

我使用了列表與「mx.controls.ProgressBar ProgressBar的」爲的itemRenderer作爲

<mx:List width="100%" dataProvider="{arr}" 
     itemRenderer="mx.controls.ProgressBar"/> 

現在我需要的是每當CurrentValue的的陣列「改編」的變化領域我想更新進度條「進展「值到CurrentValue的(其中min和進度的最大值被存儲在數組‘ARR’)

我怎樣才能這樣做。

感謝所有

回答

0

大家好
謝謝你的答案..
THR google搜索經過,我發現類似的東西是什麼,我需要在這裏
http://www.flex-blog.com/progressbar-in-datagrid-example/

非常相似的2個答案..以上通過@kubarium和@alxx ..
1.使用ItemRenderer在DataGrid中顯示ProgressBar。
2.爲DataGrid創建一個DataProvider。
3.創建一個動作來啓動ProgressBar
4.確保ArrayCollection已更新ProgressBar的每個進度。

1

我猜你ProgressBars正在顯示什麼,因爲一切是錯誤的。項目渲染器是通過function set data(value:Object):void從數據提供者獲取單個項目的類。要在ProgressBar中獲取值,可以對其進行子類化,添加數據函數(getter和setter)並從那裏設置屬性 - 此類將是項目渲染器。

接下來,itemRenderer不保證在任何時候都被實例化。列表創建它們,因爲它們需要顯示,並將未使用的內容存儲在池中。這意味着你不能與特定的列表項目交談 - 池中的任何項目都可以發揮其作用(獲取其數據)。要更改進度,您需要更新數據提供者,並重新設置。

1

訣竅是將進度條的模式設置爲手動,因爲您沒有自動偵聽下載數據的任何進度。你想設置一個值,所以進度條可以自動更新,所以手動是要走的路。此外,檢查了這一點:

<s:Application minHeight="600" minWidth="955" xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:s="library://ns.adobe.com/flex/spark"> 
<s:layout> 
    <s:HorizontalLayout/> 
</s:layout> 
<fx:Declarations> 
    <s:ArrayCollection id="arr"> 
     <fx:Object label="Group One" currentValue="20" max="200" min="0"/> 
     <fx:Object label="Group Two" currentValue="50" max="300" min="0"/> 
    </s:ArrayCollection> 
</fx:Declarations> 
<fx:Script> 
    <![CDATA[ 
     private function updateArr():void { 
      arr.getItemAt(0).currentValue = ns.value; 
     } 
    ]]> 
</fx:Script> 
<s:List dataProvider="{arr}" itemRenderer="ProgressBarWithCurrentValue"/> 
<s:NumericStepper id="ns" maximum="200" minimum="0" stepSize="10" value="20" change="updateArr()"/></s:Application> 

這裏的itemRenderer代碼,你會看到方式爲手動:

<s:ItemRenderer autoDrawBackground="true" xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:s="library://ns.adobe.com/flex/spark"> 
<fx:Script> 
    <![CDATA[ 
     private function updateCurrentValue():void { 
      pb.setProgress(data.currentValue, data.max); 
     } 
    ]]> 
</fx:Script> 
<mx:ProgressBar id="pb" maximum="{data.max}" minimum="{data.min}" mode="manual" updateComplete="updateCurrentValue()"/></s:ItemRenderer> 

如果只是設置itemRenderer的一個進度條,它會自動試圖找到一個數據源,但在你的情況下,你會餵養和更新自己。所以,你需要一個itemrenderer,你可以做一些操作。

+0

呃,這個問題被標記柔性-3,和那些S:和FX:... – alxx 2010-09-27 11:56:37

+0

我可以改變s到MX命名空間,並採取收集到MX腳本塊,但它還是會正常工作。不過,如果它不尊重標籤,我很抱歉。 – 2010-09-27 15:07:23