Data can be found at http://www.silenttrace.com/deviceData.xml
Question one - How can I create my list, "onList" in pure actionscript vice mxml? The reason I want to do this is because I get a null exception otherwise. I imagine its because I am instantiating the itemrenderer before I have any data in my arraycollection since a http service call needs to get the data. So I thought if I wait till line 35 and then instantiate the list in pure actionscript I am golden. Can someone let me know if that is possible or how I could achieve this? Things like setting itemChangeEffect and such seem to be only in mxml. Question two ignore the itemRenderer of "onList" and you will see that I get an error ever time I select the zero Item in the list on the left and click the addToOffBtn. here is main code <?xml version="1.0" encoding="utf-8"?> <mx:WindowedApplicationxmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()" width="800" height="600"> <mx:Script> <![CDATA[ import mx.controls.Alert; import mx.collections.ArrayCollection; import mx.rpc.events.ResultEvent; import mx.effects.easing.*; import listItemRenderer; [Bindable] private var devicesOnList:ArrayCollection; [Bindable] private var devicesOffList:ArrayCollection = new ArrayCollection(); private var indexOfOnList:int = 999; private var indexOfOffList:int = 999; [Embed(source="tmbdwnbox.png")] private var downIcon:Class; [Embed(source="tmbupbox.png")] private var upIcon:Class; private function init():void { deviceXML.send(); } private function setIcon(value:*):Class { if (value.CURRENTCONDITION == true) { return upIcon; } else { return downIcon; } } public function getDeviceDataRequest(event:ResultEvent):void { devicesOnList = event.result.DEVICES.PROPERTIES; } private function addSelectedItemToOffList():void { if (indexOfOnList != 999) { trace("index of On list" + indexOfOnList); devicesOffList.addItem(devicesOnList.getItemAt(indexOfOnList)); trace("length off list" + devicesOffList.length); trace("length on list" + devicesOnList.length); devicesOnList.removeItemAt(indexOfOnList); trace("length off list" + devicesOffList.length); trace("length on list" + devicesOnList.length); moveOffToOnBtn.enabled = true; if (devicesOnList.length == 1) moveOnToOffBtn.enabled = false; } indexOfOnList = 999; } private function addSelectedItemToOnList():void { if (indexOfOffList != 999) { trace("index of Off list" + indexOfOffList); devicesOnList.addItem(devicesOffList[indexOfOffList]); trace("length on list" + devicesOffList.length); trace("length on list" + devicesOnList.length); devicesOffList.removeItemAt(indexOfOffList); trace("length on list" + devicesOffList.length); trace("length on list" + devicesOnList.length); moveOnToOffBtn.enabled = true; if (devicesOffList.length == 0) moveOffToOnBtn.enabled = false; } indexOfOffList = 999; } private function onListSelectedItemClick(event:Event):void { //alwas maintain at least one device to listen too. if (devicesOnList.length != 1) { indexOfOnList = event.currentTarget.selectedIndex; } this.status = "Selected on: " + indexOfOnList; } private function offListSelectedItemClick(event:Event):void { indexOfOffList = event.currentTarget.selectedIndex; this.status = "Selected off: " + indexOfOffList; } ]]> </mx:Script> <mx:HTTPService id="deviceXML" url="http://www.silenttrace.com/deviceData.xml" result="getDeviceDataRequest(event)"/> <mx:HBox width="100%" height="100%"> <mx:List itemRenderer="listItemRenderer" dataProvider="{devicesOnList}" id="onList" width="100%" selectionColor="blue" iconFunction="setIcon" itemsChangeEffect="{itemsChangeEffect}" itemClick="onListSelectedItemClick(event)"/> <mx:VBox> <mx:Button id="moveOnToOffBtn" label="Turn Device Off" click="addSelectedItemToOffList()"/> <mx:Button id="moveOffToOnBtn" label="Turn Device On" click="addSelectedItemToOnList()" enabled="false"/> </mx:VBox> <mx:List id="offList" width="100%" selectionColor="blue" labelField="TITLE" dataProvider="{devicesOffList}" iconFunction="setIcon" itemsChangeEffect="{itemsChangeEffect}" itemClick="offListSelectedItemClick(event)"/> </mx:HBox> <!-- why does this effect cause an error when I select the first item in the list on the left every time and click the moveOnToOffBtn.--> <mx:Sequenceid="itemsChangeEffect"> <mx:WipeDown duration="500"/> <mx:Parallel> <mx:Move duration="750" easingFunction="{Elastic.easeOut}" perElementOffset="20"/> <mx:Blur startDelay="210" blurXFrom="18" blurYFrom="18" blurXTo="0" blurYTo="0" duration="500" filter="addItem"/> </mx:Parallel> </mx:Sequence> </mx:WindowedApplication> Here is itemRenderer <?xml version="1.0" encoding="utf-8"?> <mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="65" cornerRadius="10" borderStyle="solid" backgroundAlpha=".3" backgroundColor="#000000"> <mx:Script> <![CDATA[ [Bindable] private var aliveDead:Class; [Embed(source="tmbdwnbox.png")] private var downIcon:Class; [Embed(source="tmbupbox.png")] private var upIcon:Class; override public function set data(value:Object):void { //why is value null?????? if (value.CURRENTCONDITION) aliveDead = upIcon; else aliveDead = downIcon; } ]]> </mx:Script> <mx:Label text="{data.TITLE}" fontSize="16" fontWeight="bold" left="75" top="10" color="#FFFFFF" id="deviceNameLabel"/> <mx:Image top="5" left="10" id="image" source="{aliveDead}"/> <mx:Labelid="lastHeardText" htmlText="{data.LASTHEARD}" color="#FFFFFF" left="75" top="35"/> <mx:VBox width="20" top="10" right="10" bottom="10"> <mx:Button id="turnOffOnBtn" label="Turn Off/On" width="15" height="15"/> <mx:Button id="pingNowBtn" label="{data.IP}, {data.PORT}" width="15" height="15"/> </mx:VBox> </mx:VBox>