0

フレックス ツリー コンポーネントで訪問履歴を示すにはどうすればよいですか? クリック/訪問したノードを別の色で強調表示したいのですが、その後は変更されないため、訪問したすべてのノードが 1 つの色になります。

基礎となるXMLに属性を追加しようとしました

var selected:XML=app.treeObj.selectedItem as XML;
if(!selected.hasOwnProperty("visited"))
{
    selected.@visited = "true";

}

以下のように、ツリーの itemrenderer を用意します。

public class CustomTreeItemRenderer extends TreeItemRenderer
    {
        public function CustomTreeItemRenderer()
        {
            super();
        }

        override public function set data(value:Object):void
        {
            if(value !=null)
            {

                super.data = value;
                if(value.@visited=="true")
                {
                    setStyle("color", 0x000000);
                }

                invalidateDisplayList()

            }
        }

    }

このコードは新しい色を保持しますが、まったくアクセスされていないノードの色も変更します。ここで何が間違っていますか?これを達成するためのより良い方法はありますか?

ビピン

4

1 に答える 1

2

セットデータでは、訪問されていない場合はスタイルを元のスタイルに戻す必要があります。そうしないと、レンダラーが未訪問のノードにリサイクルされたときに、訪問された色が保持されます。

試す...

override public function set data(value:Object):void
    {
            if(value !=null)
            {

                    super.data = value;
                    if(value.@visited=="true")
                    {
                            setStyle("color", 0x000000);
                    } 
                    else 
                    {
                            setStyle("color", originalColor);
                    }

                    invalidateDisplayList()

            }
    }

最も効率的な方法ではありませんが (必要がなくても色を設定することになり、setStyle はコストのかかる操作です)、うまくいきます。

于 2009-10-26T07:50:07.897 に答える