如何从其DataProvider对象中获取Flex Spark List的ItemRenderer?

时间:2010-10-26 17:23:58

标签: flex itemrenderer dataprovider flex-spark

在Flex中,我可以创建一个ItemRenderer来表示Lists DataProvider中的每个项目,但是如何通过DataProviders对象访问ItemRenderer的实例?像myList.getItemRenderer(dp.getItemAt(10));

这样的东西

4 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:1)

通过使用此方法,您无法获得可查看区域之外的渲染器,并且还会出现许多其他问题。

答案 2 :(得分: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;

这是一个简单的例子,其中I标记要删除的项目,并且渲染器随着数据的更改而改变。对于较大的数据集,我知道这可能有点慢,但它可以为您提供所需的控制权。

如果您需要更改一个渲染器,只需修改dataProvider或dataGroup中相应对象的数据。

var item:Object = this.getItemAt(index);

答案 3 :(得分:1)

我知道这是一个老线程,但也许它会帮助某人:

var item:ItemRenderer = list.dataGroup.getElementAt(0) as ItemRenderer;

这将为您提供ItemRenderer,如果您有自定义IR,那么只需使用该类并进行演员和您的设置。