0

最初の位置/項目にボタンがあり、他のすべての項目にそれぞれの画像がある TileList が必要です。さて、Plastic テーマと s:List (スクローラーの List の問題) に問題が発生した後、私はあきらめて TileList を使い始めました。TileList にカスタム アイテム レンダラーを使用しています。それはかなり単純ですが、私は何か間違ったことをしていると思います。

String クラスの最初の項目で構成された ArrayCollection 内の TileList の dataProvider であり、その他はすべて Image クラスを拡張するカスタム クラスです。のように: arr=["bt",Image,Image.....];

理由はわかりませんが、TileList は最初の項目に正しいボタンを表示しますが、その後、さらに 2 つの項目の画像を表示し、次に 4 番目の項目に正しい画像とボタンを表示します。これはパターンです.... 3つの正しいアイテムの後、次はボタンが付いています....

私のカスタムItemRenderer:

<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"

     horizontalAlign="center"
     verticalAlign="middle"
     creationComplete="init()">
<mx:Script>
    <![CDATA[
        import mx.controls.Button;
    protected function init():void
    {
        if(this.data == "bt")
        {
            var bt:Button = new Button();
            bt.id = "btEnviar";
            bt.width=84;
            bt.height=28;
            bt.label = "Enviar Fotos"; 
            addElement(bt);

        }

    }
    ]]>
</mx:Script>
<mx:Image id="img" source = "{data}"/>

誰かが助けてくれたら本当にありがたいです...インターネット上でそれについて何も見つかりませんでした.

ありがとう!

4

1 に答える 1

0

仮想レイアウトの問題のようです。これは、レンダラーが再利用されることを意味します。それらが再初期化されていない場合(例:bt要素を削除)、このようなことが起こる可能性があります。また、public function data(value:Object):voidをオーバーライドして、そこにコードを配置することをお勧めします。本当に必要な場合は、仮想レイアウトを無効にすることもできます(DataGroup/ListでuseVirtualLayout=false)。

現時点では説明する時間があまりありませんが、DataGroupのitemRendererFunctionプロパティを調べることをお勧めします。この関数は、データに応じて使用するアイテムレンダラーのタイプを定義するClassFactoryを返します。

アドビのリファレンスからのリンクは次のとおりです。アイテムレンダラーの操作。「Sparkコンテナでのアイテムレンダラー関数の使用」を参照してください。

于 2012-02-09T15:52:55.687 に答える