Показать сообщение отдельно
Старый 27.08.2008, 08:02
Pogrebeshka вне форума Посмотреть профиль Отправить личное сообщение для Pogrebeshka Найти все сообщения от Pogrebeshka
  № 1  
Ответить с цитированием
Pogrebeshka

Регистрация: Jun 2008
Сообщений: 24
По умолчанию Item Renderer для List

Здравствуйте всем!

У меня появилась проблема, которую я не могу решить уже третий день. Мне надо создать кастомный ItemRenderer для List. Там надо чтобы в каждой строке был RadioButton и несколько CheckBox. "Галочки" пока проблем не вызвали, но радио батон изначально создал проблему, так как они должны быть в одной группе, но это решилось как-то. Создало проблему то, что я не ожидал. Я не могу к CheckBox применить CSS из внешнего файла. Вроде все нормально его загружаю но когда я пытаюсь приметьи СSS к нему, плейер выдает ошибку.

Если кто-нибудь знает как это можно реализовать проще, без написания собвенного класса, я буду вам весьма признателен.

Спасибо.

Вот код класса:
Код:
import flash.events.Event;
   import flash.net.URLLoader;
   import flash.net.URLRequest;
   import flash.text.StyleSheet;
   
   import mx.controls.CheckBox;
   import mx.controls.Label;
   import mx.controls.RadioButton;
   import mx.controls.listClasses.BaseListData;
   import mx.controls.listClasses.ListBase;
   import mx.controls.listClasses.ListItemRenderer;
   import mx.events.ListEvent;
   
   public class RadioButtonListItemRenderer extends ListItemRenderer
   {

      private var checkBoxViseble:CheckBox;
      private var radioButton:RadioButton;
      private var checkBoxSort:CheckBox;
      private var titleLabel:Label;
      private var styleSheet:StyleSheet;
      private var request:URLRequest;
      private var loader:URLLoader;
      private var styleMan:Object;
      
      public function RadioButtonListItemRenderer()
      {
      	this.styleSheet = new StyleSheet();
         this.request = new URLRequest("style.css");
         this.loader = new URLLoader();
         this.loader.addEventListener(Event.COMPLETE,OnLoadCSS);
         this.loader.load(request);
      }

      private var list:ListBase;

      override protected function createChildren():void
      {
         super.createChildren();
         
         this.checkBoxViseble = new CheckBox();          
         this.radioButton = new RadioButton();
         this.checkBoxSort = new CheckBox();
         this.titleLabel = new Label();
         
         this.addChild(this.checkBoxViseble);
         this.addChild(this.radioButton);
         this.addChild(this.checkBoxSort);
         this.addChild(this.titleLabel);
      }
      
      override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
      {         
         super.updateDisplayList(unscaledWidth, unscaledHeight);

         this.checkBoxViseble.x = 3;
         this.checkBoxViseble.y = this.height / 2 - this.radioButton.height / 2;
         this.radioButton.x = 25;
         this.radioButton.y = this.height / 2 - this.radioButton.height / 2;
         
         this.checkBoxSort.x = 45;
         this.checkBoxSort.y = this.height / 2 - this.radioButton.height / 2;
         this.checkBoxSort.visible = false;

        
         this.label.x = 65;
         
      }
      
       private function OnLoadCSS(event:Event):void
       {
       	this.styleSheet.parseCSS(loader.data);
       	styleMan = this.styleSheet.getStyle(".visibleCBStyle");

       	//проблема собсвенно возникает здесь.
       }
      override public function set listData(value:BaseListData):void
      {
         super.listData = value;
                   
         if (value.owner is ListBase)
         {          
            if (this.list)
            {
               this.list.removeEventListener(ListEvent.CHANGE, ownerChangeHandler);
            }
                
            this.list = value.owner as ListBase;

         }
      }
      
     
      private function ownerChangeHandler(event:ListEvent):void
      {       
         this.radioButton.selected = (this.data != null && this.data == this.list.selectedItem);
      }
      
   }