I'm trying to display a horizontal list of words in an AIR application.  I'm 
creating a custom 
component for the ItemRenderer, and then am setting the HorizontalList's 
dataProvider to 
an array of strings.

I can see the proper # of items are being added to the HorizontalList (the 
rollover mouse 
state is appearing for the appropriate number of items), but no text is 
displayed in the 
list.  I'm tracing within the component and it's setting the text for each item 
properly, so 
I'm stumped.  Anyone have any ideas?

/* --- ListContainer.mxml --- */

<mx:Canvas ...>
  <mx:Script>
    <![CDATA[
       import mx.collections.ArrayCollection;
       [Bindable] private words:ArrayCollection = new ArrayCollection(["bug", 
"show", "me", 
"the", "text"]);
    ]]>
  </mx:Script>

  <mx:HorizontalList width="100%" dataProvider="{words}" 
itemRenderer="MyRenderer" 
/>
</mx:Canvas>

/* === ListContainer.mxml === */

/* --- MyRenderer.as --- */

import mx.controls.Label;
import mx.controls.listClasses.IListItemRenderer;
import mx.core.IDataRenderer;
import mx.core.UIComponent;

public class MyRenderer extends UIComponent implements IDataRenderer, 
IListItemRenderer {
  protected var wordLabel:Label;

  private var _word:String;
  private var _wordChanged:Boolean;

  public function MyRenderer() {
    super();
    _word = "";
    _wordChanged = false;
  }

  override protected function commitProperties():void {
    super.commitProperties();
    if(_wordChanged) {
      _wordChanged = false;
      wordLabel.text = _word;
      trace("wordLabel being set: " + wordLabel.text + " and is visible: " + 
wordLabel.visible);
      invalidateSize();
    }
  }

  override protected function createChildren():void {
    super.createChildren();
    if(!wordLabel) {
      wordLabel = new Label();
      addChild(wordLabel);
    }
  }

  override protected function measure():void {
    super.measure();

    measuredWidth = wordLabel.getExplicitOrMeasuredWidth();
    measuredHeight = wordLabel.getExplicitOrMeasuredHeight();
  }

  public function get data():Object {
    return _word;
  }

  public function set data(value:Object) {
    if(value is String) {
      _word = String(value);
      _wordChanged = true;
      invalidateProperties();
      invalidateDisplayList();
    }
  }

}
/* === MyRenderer.as === */

Reply via email to