2012-02-09 5 views
0

私は何かに助けが必要です ボタンの最初の位置/アイテムにはボタンがあり、他のアイテムにはそれぞれイメージがあります。 さて、プラスチックのテーマとs:List(scrollerのListの問題)に問題があった後、私はあきらめてTileListを使って作業を始めました。 TileListにカスタムアイテムレンダラーを使用しています。それはかなりシンプルですが、私は何か間違っていると思います。フレックス - 最初のアイテムがButtonであり、他のアイテムがButtonであるタイルリスト

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}"/> 

私は本当に感謝...私は」なかったのそれはインターネット上で何も見つかりませんでした。

ありがとうございました!

+0

あなたはcommitProperties()をオーバーライドし、initializeイベントを使用する代わりにコードを追加しようとしましたか? –

+0

何も= /最悪の状態になりました。最初の項目が表示されました。2つのボタンが表示されます。 – Crofuncio

+0

本当にあなたは何か間違っていると思います。まずレンダリングの仕組みを理解してください。退屈だと思うが、アイテムレンダラーの問題はいつでもぶつかるだろう。 –

答えて

0

仮想レイアウトの問題のようです。つまり、レンダラーは再利用されます。再初期化されていない場合(例:bt要素を削除する場合)、このようなことが起こる可能性があります。また、私はあなたが公開関数のデータ(値:オブジェクト)を無効にすることをお勧めします:voidとそこにあなたのコードを入れてください。本当に必要な場合は、仮想レイアウトを無効にすることもできます(データグループ/リストでuseVirtualLayout = false)。

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

これはAdobeの参考文献からのリンクです:Working with item renderersです。 「Sparkコンテナでアイテムレンダラー関数を使用する」を参照してください。

+0

Exortが言っているように、アイテムレンダラーは再利用されるので、 'this.data!=" bt "'の場合にどうなるかを説明することが重要です。理想的には、elseステートメントを追加して、ボタンが存在するかどうか、およびディスプレイからの削除を確認します。 もう1つの方法は、レンダラーに状態を追加し、データを設定するときに状態を明示的に変更することです。 if(this.data == "bt"){this.currentState = "button"} else {this.currentState = "image"} ' – James

関連する問題