ItemRenderer这种东西很常用,很可惜垂直滚动条拖来拖去(特别是还用上了variableRowHeight)可能造成ItemRenderer的位置不正确,错位或者重叠,这似乎是一个bug了,google半天没啥结果(更可惜的是我没有截图看看,哈)。不单单是List,只要基于ListBase的都有可能。在我自己的案子里,我使用了variableRowHeight=true的List,ItemRenderer是一个VBox,包含了Text和几个Button。每段文字各不相同。
原因
说实话我没看过源码也不是非常清楚。flex framework从效率上考虑,ItemRenderer不是一次性全部渲染掉的,比如List只能显示两个ItemRenderer,那只会渲染这两个,如果滚动显示了其它,就会渲染其它的ItemRenderer,这个过程比较复杂,以后有空好好研究下。
方案
既然是滚动条,就从滚动条上下手。List继承自ListBase,ListBase来自ScrollControlBase,ScrollControlBase就是处理滚动特性的基类,它有一个protected方法scrollHandler,是用来处理滚动事件的。下面要做的事情就简单了。只要在scrollHandler函数里加上点东西,来保证ItemRenderer位置正确。很可惜这块的原理我也不是很明确,只是在实验的时候发现RESIZE可以重画List,其实它对应的调用updateList方法(ListBase的protected方法),这样位置就会调整正确了。来看看updateList的注释:
Refreshes all rows now. Calling this method can require substantial processing, because can be expensive at it completely redraws all renderers in the list and won’t return until complete.
看看重新扩展的List
package myvocal.visual { import flash.events.Event; import mx.controls.List; import mx.events.*; public class MyList extends List { public function MyList() { //TODO: implement function super(); } protected override function scrollHandler(event:Event):void { trace("onUserScroll") super.scrollHandler(event); this.updateList() } } }
搞定!
相关推荐
在Flex手机项目开发中,创建自定义的List组件ItemRenderer是一项常见的需求,目的是为了提供更加丰富和个性化的显示效果。本文将深入探讨如何利用IconItemRenderer来实现这一目标,同时结合具体的实例,介绍两种不同...
在 Flex 开发中,ItemRenderer 是一种非常强大的工具,它允许开发者自定义列表(List)、数据网格(DataGrid)等控件中每一项的外观和行为。通过 ItemRenderer,我们可以实现更加灵活和动态的界面设计。 #### 二、...
相反,它会创建一个有限数量的itemRenderer实例,并在用户滚动列表时重用这些实例。这些itemRenderer实例会根据需要向上或向下移动,以显示当前可见的行。这种方法大幅提高了应用的性能,但同时也带来了挑战,尤其是...
然而,在实际应用中,我们可能会遇到一些问题,比如当TileList包含可选中的CheckBox时,滚动条滚动可能导致选中状态混乱,以及获取TileList内部数据的困难。本文将详细讲解如何解决这些问题。 首先,我们要理解...
在Flex4中,ItemRenderer是一种强大的工具,用于自定义数据Grid、List或其他数据绑定组件中的项显示方式。本文将深入探讨如何使用Flex4创建一个ItemRenderer,以实现类似雅虎聊天界面的效果,并介绍相关的核心概念和...
为了避免对框架造成破坏,Flex限制了从外部直接访问ItemRenderer的能力。例如,不能直接修改某个单元格的颜色或内容。这是因为ItemRenderer的设计初衷是为了提高性能和避免内存泄漏。 **3. 性能优化建议** - **...
可能的解决方案可能包括: 1. **按需加载**:仅在需要显示特定数据项时才创建对应的ItemRenderer,而不是一次性加载所有。 2. **缓存策略**:对于已创建但不再显示的ItemRenderer,可以将其缓存起来,以便再次需要...
- 例如,如果内渲染器名为`MyItemRenderer1`,则在List的MXML代码中,可以这样设置:`<s:List itemRenderer="components.MyItemRenderer1"/>` - 可以通过在内渲染器中添加事件监听器来处理用户与列表项的交互,如...
因此,当项被滚动出视口后,它们可能被回收并用于渲染其他项。因此,记得在`commitProperties()`方法中更新界面状态,以确保渲染器正确反映当前数据项。 ### 三、高级用法 1. **动态itemRenderer** 有时我们可能...
例如,初始状态下显示第 1-10 行的 renderer 在用户向下滚动后可能会被重用来显示第 11-20 行的数据。 #### 四、外部 Renderer 虽然内联 renderer 很方便,但在处理复杂逻辑或重用 renderer 代码时,推荐使用外部 ...
flex中经常会使用到渲染器,这里简要介绍一下渲染器的一些知识
在Spark组件中,如List或DataGrid,我们通常会用到`<s:List.itemRenderer>`或`<s:DataGrid.itemRenderer>`这样的属性来指定itemRenderer。 下面是一个简单的内联itemRenderer的示例,展示如何在Flex项目中创建和...
Flex ItemRenderer 是Adobe Flex框架中的一个重要概念,它主要用于自定义MX和Spark组件列表视图(如List、DataGrid等)中的每一项显示样式。ItemRenderer允许开发者根据数据项的内容个性化呈现,提供更丰富的用户...
2. **访问 listItems 属性**:`ListBaseContentHolder` 提供了一个名为 `listItems` 的属性,它返回一个数组,数组中的每个元素对应着 `dataProvider` 中的一项,并且包含了用于渲染该项的 `ItemRenderer` 实例。...
在Flex开发中,ItemRenderer是一种非常关键的组件,它允许我们自定义MX或者Spark列表类(如List、DataGrid等)中的数据项显示方式。ItemRenderer使得开发者能够以更个性化的方式展示数据,提升用户界面的视觉效果和...
在我们的相册例子中,ItemRenderer可能包含以下元素: 1. 图片显示:我们可能会使用mx.controls.Image或spark.components.Image组件来展示相册中的图片。我们需要设置其source属性来绑定到数据项中的图片URL。 2. ...
默认的ItemRenderer可能无法满足所有设计需求,因此自定义ItemRenderer可以让你为每个数据项提供独特的视觉表现,提升用户体验。 要创建一个自定义的ActionScript ItemRenderer,你需要遵循以下步骤: 1. **创建新...
对于滚动条问题,解决方案可以是:在Tree的滚动事件(scroll)中调用`myTree.invalidateList()`方法,以此来刷新树。这个方法会强制Flex重新渲染Tree的可视部分,有助于缓解滚动时可能出现的显示问题。不过,这种...
2. **性能优化**:避免在`ItemRenderer`中进行复杂的计算,因为它们可能影响列表的滚动性能。 3. **复用机制**:Flex的列表控件有渲染器复用机制,因此要注意渲染器的状态管理,确保新旧数据间的正确切换。 **示例...
在Flex4.x中,构建一个可编辑的List组件并实现带序号排列的功能是一项常见的需求,这主要涉及到Flex4的List组件、数据绑定、ItemRenderer自定义以及数据管理等方面的知识。下面将详细介绍如何实现这样的功能。 1. *...