Apache flex 如何从Flex Spark列表的DataProvider对象获取ItemRenderer?
在Flex中,我可以创建一个ItemRenderer来表示列表DataProvider中的每个项目,但是如何通过DataProviders对象访问ItemRenderer的实例呢?类似于Apache flex 如何从Flex Spark列表的DataProvider对象获取ItemRenderer?,apache-flex,itemrenderer,dataprovider,flex-spark,Apache Flex,Itemrenderer,Dataprovider,Flex Spark,在Flex中,我可以创建一个ItemRenderer来表示列表DataProvider中的每个项目,但是如何通过DataProviders对象访问ItemRenderer的实例呢?类似于myList.getItemRenderer(dp.getItemAt(10))公共函数getItemRenderer(列表:列表,项目:对象):ItemRenderer { var dataGroup:dataGroup=list.dataGroup; var n:int=dataGroup.numElemen
myList.getItemRenderer(dp.getItemAt(10))代码>公共函数getItemRenderer(列表:列表,项目:对象):ItemRenderer
{
var dataGroup:dataGroup=list.dataGroup;
var n:int=dataGroup.numElements;
对于(变量i:int=0;i
使用此方法,无法获取位于可视区域之外的渲染器,并且还会出现许多其他问题。如果需要更改项目渲染器的行为方式,请更改导致该行为的数据
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;
我知道这是一条古老的线索,但也许它会帮助某些人:
var item:ItemRenderer = list.dataGroup.getElementAt(0) as ItemRenderer;
这将为您提供ItemRenderer,如果您有自定义IR,则只需使用该类和cast以及您的集合。由于Flex列表默认情况下会回收其项目渲染器,因此您将无法可靠地访问给定数据对象的项目渲染器。如果数据对象滚动到列表的可视区域之外,甚至可能没有与该数据对象关联的渲染器。你想完成什么?非常感谢,我需要这样的东西。为了让它一直工作,你需要将列表的UseVirtualYout设置为false。这样,即使不可见,也将创建所有ItemRenders。使用useVirtualLayout true,某些ItemRenderer只有在可见时才会创建。您是对的。我没有选择前面的答案,但如果能找到解决方案就太好了。这个问题没有“正确”的答案,因为Flex SDK不支持通过数据直接访问渲染器。
var item:Object = this.getItemAt(index);
var item:ItemRenderer = list.dataGroup.getElementAt(0) as ItemRenderer;