我有一个列表控件,它使用数组集合作为数据提供程序。数组集合在actionscript中初始化。该列表如下所示:
<mx:List width="500" id="activeMessages" styleName="messages" variableRowHeight="true" verticalScrollPolicy="off" horizontalScrollPolicy="off"
dataProvider="{activeMessageTitles}"/>
和styleName .messages是这样的:
.messages{
border-style:solid;
corner-radius:4;
border-color:#cccccc;
padding:0 0 0 0;
background-color:#DCDCDC;
margin-bottom:400px;
padding-bottom:120px;
}
数组集合动态加载数据并已经过验证,因此它具有必需的数据。必要的数据只是随机单词而不是句子,对于任何给定的数组,不超过两个单词。
var activeMessageTitles:ArrayCollection = new ArrayCollection();
问题在于格式化。 dataProvider会检索所有项目,并在列表中呈现它们。唯一的问题是列表中任何两个行项之间的空间很大,占用了任意数量的空间。我希望列表项能够一个接一个地渲染,而不是在中间有大量的空间。
任何人都可以指出这里究竟出了什么问题吗?
答案 0 :(得分:1)
问题听起来像虚拟化。列表回收项目渲染器,仅用于显示屏幕上可见的内容。滚动时,flex将获取刚刚离开视图的渲染器,并将其重新用于进入视图的渲染器。根据回收渲染器中消息的大小,它仍然会保留那么大的高度......即使插入新消息的信息很小。
要解决此问题,请创建项目渲染器(大量教程)并覆盖其set data()方法,以便您可以调整渲染器的大小以适应新内容。
有关详细信息,请参阅此链接:
http://www.adobe.com/devnet/flex/articles/itemrenderers_pt1.html