在 Flex 中,我可以创建一个 ItemRenderer 来表示 Lists DataProvider 中的每个项目,但是如何通过 DataProviders 对象访问 ItemRenderer 的实例?就像是myList.getItemRenderer(dp.getItemAt(10));
问问题
11216 次
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
使用这种方法,无法获取到超出可视区域的渲染器,还会出现很多其他问题。
于 2012-03-16T07:06:59.600 回答
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);
于 2013-02-13T19:09:14.950 回答
1
我知道这是一个旧线程,但也许它会帮助某人:
var item:ItemRenderer = list.dataGroup.getElementAt(0) as ItemRenderer;
这将为您提供 ItemRenderer,如果您有自定义 IR,则只需使用该类并投射和您的设置。
于 2017-05-22T17:51:22.953 回答