Scrollen in der Liste macht Probleme

cr4shm4n

Mitglied
Hallo,
ich bastele gerade an einer kleinen Flex-Anwendung, in der eine Liste mit Elementen vorkommt, die abhängig von den jeweiligen Inhalten eingefärbt werden sollen. Dazu steht im Datenobjekt eine Eigenschaft namens color, auf die ich dann in einem eigenen itemRenderer zugreife.
Der Text wird über die toString-Funktion des Datenobjekts generiert.
Hier noch der Codeausschnitt mit dem itemRenderer:
Code:
<mx:List id="shoutListControl" dataProvider="{shoutList}"
    styleName="shoutList" variableRowHeight="true"
    verticalScrollPolicy="on" horizontalScrollPolicy="off" selectable="false"
    left="0" top="25" bottom="0" right="0" textAlign="left" labelFunction="shoutToString">
    <mx:itemRenderer>
        <mx:Component>
            <mx:HBox backgroundColor="{data.color}"
                backgroundAlpha="1.0" styleName="shoutListItem" width="{this.width-2}">
                <mx:Text id="shoutText" styleName="shoutBody" width="100%" htmlText="{data}"/>
            </mx:HBox>
        </mx:Component>
    </mx:itemRenderer>
</mx:List>

So, damit komme ich zum eigentlichen Problem. Auf den ersten Blick scheint beim aufrufen zwar alles in Ordnung, aber sobald man scrollt, erscheinen leere Einträge (die allerdings korrekt eingefärbt sind). Mit ein wenig herumscrollen schafft man es manchmal, die Einträge zu füllen, was zu einem unerträglichen herumhüpfen der Scrollleiste führt.

Ein Lösungsversuch sah so aus:
Code:
<mx:List id="shoutListControl" dataProvider="{shoutList}"
    styleName="shoutList" variableRowHeight="true"
    verticalScrollPolicy="on" horizontalScrollPolicy="off" selectable="false"
    left="0" top="25" bottom="0" right="0" textAlign="left" labelFunction="shoutToString">
    <mx:itemRenderer>
        <mx:Component>
            <mx:HBox creationComplete="init();"
                backgroundAlpha="1.0" styleName="shoutListItem" width="{this.width-2}">
                <mx:Script>
                    <![CDATA[
                        public function init():void
                        {
                            shoutText.htmlText = data.toString();
                            this.setStyle("backgroundColor", data.color);
                        }
                    ]]>
                </mx:Script>
                <mx:Text id="shoutText" styleName="shoutBody" width="100%"/>
            </mx:HBox>
        </mx:Component>
    </mx:itemRenderer>
</mx:List>
Das führt dazu, dass die Einträge von der ersten Seite beim runterscrollen einfach nochmals in der gleichen Reihenfolge erscheinen.

Hat da jemand Lösungsansätze?
 
Ok, ich habs inzwischen aufgegeben, es so zu versuchen. Meine neuer, funktionierender Ansatz lautet: Einfache VBox nehmen, den Rest mit eigenem Code Managen. Funktioniert jetzt einwandfrei. Für die Elemente selbst habe ich eine Extra-Komponente erstellt.
 
Zurück