hi all,
while creating a Itemrender of for the list , I am facing stranger problems
1. the data displayed in the itemrendere gets screwed up while scrolling
2. it takes lots of time (> 1 sec ) to render list
Can somebody please anyalyse this and tell me that what is that which is
taking resources ...
Any help would be great.
here is the itemrendere :
package ms.chatmodule.view
{
import flash.events.MouseEvent;
import ms.chatmodule.controls.ChatController;
import ms.imfusion.model.MemberObject;
import ms.imfusion.util.view.ImageHolder;
import mx.containers.Canvas;
import mx.controls.Image;
import mx.controls.Label;
import mx.controls.listClasses.BaseListData;
import mx.controls.listClasses.IDropInListItemRenderer;
import mx.controls.listClasses.IListItemRenderer;
import mx.controls.listClasses.ListData;
import mx.core.BitmapAsset;
import mx.core.IDataRenderer;
import mx.core.UITextField;
/**
* Displays one row in memberList
*/
public class MemberBox extends Canvas implements IDataRenderer,
IDropInListItemRenderer, IListItemRenderer
{
private var memberName:Label;
private var memberStatus:UITextField;
[Embed(source='ms/felix/css/assets/felixStyle.swf',
symbol='memberOnline')]
private var onlineIcon:Class;
[Embed(source='ms/felix/css/assets/felixStyle.swf',
symbol='memberOffline')]
private var offlineIcon:Class;
[Embed(source='ms/felix/css/assets/felixStyle.swf',
symbol='memberBusy')]
private var busyIcon:Class;
[Embed(source='ms/felix/css/assets/felixStyle.swf',
symbol='organizer')]
private var organizerIcon:Class;
private var memberObject:MemberObject;
private var statusImage:Image;
private var orgnizerImage:Image;
private var imgObj:BitmapAsset;
private var avatarHolder:ImageHolder;
private var serviceStatus:String;
private var memberColor:uint;
private var statusIcon:Object;
private var statusString:String;
/**
* Constructor
*/
function MemberBox() {
super();
this.horizontalScrollPolicy = "off";
this.verticalScrollPolicy = "off"
}
override public function set data(value:Object):void {
super.data = value;
memberObject = value as MemberObject;
memberColor = 0xbababa;
orgnizerImage.source = new organizerIcon();
if(memberObject.userRole == "A"){
orgnizerImage.visible = true;
}
else{
orgnizerImage.visible = false;
}
avatarHolder.unloadImage();
//trace("setData MemberBox " + memberObject.name + " --- " +
this.listData.owner["listData"].label)
serviceStatus = this.listData.owner["listData"].label;
statusString = "";
statusIcon = "";
getMemberStatuts();
getStatusIcon();
invalidateProperties();
}
private function getMemberStatuts():void {
if(serviceStatus == "L") { // event is locked
if(memberObject.responseToLockedChoice == "Y") {
memberColor = 0x196a0c;
}else if(memberObject.responseToLockedChoice == "N") {
memberColor = 0xff2a0e;
}
}
else if(memberObject.hasResponded == 'Y'){
memberColor = 0x0a92cb;
}
if(memberObject.hasSeen == "U") {
statusString = "(Not Seen Yet)";
if(memberObject.inviteEmailStatus == "FD") {
statusString= "(Delivery Failed)";
}
}
}
private function getStatusIcon():void {
if(memberObject.presence == "Online"){
statusIcon = new onlineIcon() ;
}
if(memberObject.presence == "Offline"){
statusIcon = new offlineIcon();
}
if(memberObject.presence == "Busy"){
statusIcon = new busyIcon();
}
}
override protected function createChildren():void {
//trace("createChildren MemberBox");
super.createChildren();
orgnizerImage = new Image();
addChild(orgnizerImage);
orgnizerImage.height = 10;
orgnizerImage.width = 10;
avatarHolder = new ImageHolder();
addChild(avatarHolder);
avatarHolder.height = 35;
avatarHolder.width = 35;
memberName = new Label();
memberName.styleName = "NormalTextBoldSmall"
addChild(memberName);
memberStatus = new UITextField();
memberStatus.styleName = "NormalTextSmall";
addChild(memberStatus);
statusImage = new Image();
addChild(statusImage);
statusImage.height = 5;
statusImage.width = 5;
addEventListener(MouseEvent.CLICK,showChatWindow)
}
private function showChatWindow(event:MouseEvent):void {
ChatController.getInstance().getChatDetails(memberObject.userId
);
}
override protected function updateDisplayList(unscaledWidth:Number,
unscaledHeight:Number):void{
//trace("updateDisplayList MemberBox"+ memberObject.name)
super.updateDisplayList(unscaledWidth,unscaledHeight)
/* trace("updateDisplayList MemberBox " + memberObject.name + "
--- "+ this.listData.owner["listData"].label)
avatarHolder.y=0;
memberName.x = avatarHolder.width + avatarHolder.x + 10 ;
memberName.width = 70 ;
var widthofmemberName:Number = (memberName.textWidth>65) ? 65 :
memberName.textWidth;
memberStatus.x = memberName.x + widthofmemberName
statusImage.x = memberStatus.x + memberStatus.textWidth+ 10;
statusImage.y = memberName.y + 5;
avatarHolder.x = orgnizerImage.width + 10; */
}
override protected function measure():void{
//trace(" measure MemberBox"+ memberObject.name);
super.measure();
avatarHolder.imageSource = memberObject.imageUrl;
memberName.setStyle("color",memberColor);
memberStatus.text = statusString;
memberName.text = memberObject.name;
avatarHolder.y=0;
memberName.x = avatarHolder.width + avatarHolder.x + 10 ;
memberName.width = 70 ;
var widthofmemberName:Number = (memberName.textWidth>65) ? 65 :
memberName.textWidth;
memberStatus.x = memberName.x + widthofmemberName
statusImage.x = memberStatus.x + memberStatus.textWidth+ 10;
statusImage.y = memberName.y + 5;
avatarHolder.x = orgnizerImage.width + 10;
}
override protected function commitProperties():void {
memberStatus.text = statusString;
memberName.text = memberObject.name;
memberName.setStyle("color",memberColor);
super.commitProperties();
statusImage.source = statusIcon;
//trace(" commitProperties MemberBox"+ memberObject.name);
}
/**
* @private
* Storage for the listData property.
*/
private var _listData:ListData;
[Bindable("dataChange")]
/**
* The implementation of the <code>listData</code> property
* as defined by the IDropInListItemRenderer interface.
* @see mx.controls.listClasses.IDropInListItemRenderer
*/
public function get listData():BaseListData {
return _listData;
}
/**
* @private
*/
public function set listData(value:BaseListData):void {
_listData = ListData(value);
invalidateProperties();
}
}
}
Regards
PS