如何防止使用Flex中的新实例替换itemRenderer

这个问题听起来微不足道,只是将virtualLayout设置为false,但那不是我所追求的。

我有以下情况。 我的Flex移动应用程序具有预定义的容器,通常为总应用程序宽度的一半。 用户可以最大化这些组件,以便它们占用所有可用的宽度。

当然,对于在ListDataGroup中显示数据的组件,渲染器必须调整大小。 这可以直接使用,但我需要它们在组件最大化时显示更多信息。 为了工作,我创建了一个非常简单的方法来更新渲染器;

private function updateRenderer():void {
            _itemRenderer.properties = {isFullScreen: _isFullScreen, headerProperties:_headerProperties, visibleColumns:_visibleColumns, optimalColWidth:_optimalColWidth, grid:this.name, fids:_fids};
            _list.itemRenderer = _itemRenderer;
}

渲染器属性(如visibleColumns)相应地发生变化,并且由于渲染器在调整大小时将自动失效,因此可以使用新属性重新绘制渲染器属性。

这很好,但不幸的是,新的渲染器是用这种程序创建的,而不是简单地重用现有的渲染器并让它们重新绘制。

有什么方法可以改变这种行为,或者有人知道更好的方式来完成这样的任务吗?


如果我了解您显示的代码,它会替换itemRenderer属性; 所以“预期”在发生这种情况时,所有现有渲染器都将被销毁 - 因为它们是用“旧”渲染器创建的,然后替换为“新”渲染器的实例。

您可以考虑直接在渲染器上更改属性:

   (_list.itemRenderer as ClassFactory).properties = {isFullScreen: _isFullScreen, headerProperties:_headerProperties, visibleColumns:_visibleColumns, optimalColWidth:_optimalColWidth, grid:this.name, fids:_fids};

然后强制您的dataProvider进行刷新,以便所有itemRenderer都重新绘制,如果需要:

(_list.dataProvider as ArrayCollection).refresh()
链接地址: http://www.djcxy.com/p/34599.html

上一篇: How to prevent itemRenderers from being replaced with new instances in Flex

下一篇: spark list loose scroll