4

Flex では、Lists DataProvider の各項目を表す ItemRenderer を作成できますが、DataProviders オブジェクトを介して ItemRenderer のインスタンスにアクセスするにはどうすればよいですか? 何かのようなものmyList.getItemRenderer(dp.getItemAt(10));

4

4 に答える 4

15
public function getItemRenderer(list:List, item:Object):ItemRenderer
{
    var dataGroup:DataGroup = list.dataGroup;
    var n:int = dataGroup.numElements;
    for (var i:int = 0; i < n; i++)
    {
        var renderer:ItemRenderer = dataGroup.getElementAt(i) as ItemRenderer;
        if (renderer && renderer.data == item)
            return renderer;
    }
    return null;
}
于 2010-10-27T15:59:23.957 に答える
1

アイテムレンダラーの動作を変更する必要がある場合は、動作の原因となっているデータを変更してください。

var items:ArrayCollection = this.dataProvider as ArrayCollection;
    var newItems:ArrayCollection = new ArrayCollection();
    if (items.length > 0) {
        for (var i:int = 0; i < items.length; i++) {
            var item:Object = items[i] as Object;

            if (!item.editMode) {
                item.editMode = true;
            } else {
                item.editMode = false;
            }

            newItems.addItem(item);
        }
    }

    this.dataProvider = null;
    this.dataProvider = newItems;

これは、アイテムを削除可能としてマークし、データが変更されたためにレンダラーがそれに応じて変化する単純な例です。より大きなデータセットの場合、これは少し遅くなる可能性があることを理解していますが、それはあなたが求めているコントロールを提供します。

1つのレンダラーを変更する必要がある場合は、dataProviderまたはdataGroup内の対応するオブジェクトのデータを変更するだけです。

var item:Object = this.getItemAt(index);
于 2013-02-13T19:09:14.950 に答える
1

この方法を使用すると、表示可能領域外のレンダラーを取得できなくなり、その他の問題も多く発生します。

于 2012-03-16T07:06:59.600 に答える