如何使用虚拟布局获取Spark List上的可见项目

时间:2010-04-12 11:42:12

标签: flex actionscript flex-spark

我有:

  • 数字的ArrayCollection;
  • 使用上面的ArrayCollection作为dataprovider的一个List,以及virtualLayout = true;
  • 自定义ItemRenderer,显示标签: a)数量 b)y位置取决于数量和可见的最高数量

换句话说,如果我在AC中有10个数字,并且屏幕上只显示5个,那么这些5的y位置将取决于那些5的最大数值。当用户滚动时,当然这5个元素会发生变化,因此项目渲染器中标签的位置会发生变化。

我的问题:

1)如何获取“当前”可见的项目列表? 2)要覆盖哪个事件/方法会帮助我知道列表已滚动/可见项目已更改?

谢谢,

JoãoSaleiro

3 个答案:

答案 0 :(得分:6)

getItemIndicesInView():Vector.<int> 返回此DataGroup中可见的项呈示器的索引。

答案 1 :(得分:1)

我用这种方式解决了我的问题:

protected function pagedList_touchInteractionEndHandler(event:TouchInteractionEvent):void
{
    var _index:int = (event.currentTarget.scroller.viewport.layout.horizontalScrollPosition / event.currentTarget.scroller.viewport.layout.columnWidth);                
}

<s:List id="pagedList" scrollSnappingMode="center" selectionColor="#FFFFFF" downColor="#FFFFFF" focusAlpha="0" 
            width="100%" height="100%" useVirtualLayout="true"
            verticalScrollPolicy="off" horizontalScrollPolicy="on"
            pageScrollingEnabled="true" 
            itemRenderer="myItemRender" 
            skinClass="skins.PagedListSkin" 
            touchInteractionStart="pagedList_touchInteractionStartHandler(event)" touchInteractionEnd="pagedList_touchInteractionEndHandler(event)" >
        <s:layout>
            <s:TileLayout orientation="rows" requestedRowCount="1" 
                columnWidth="{pagedList.width}" rowHeight="{pagedList.height}" 
                verticalGap="0" horizontalGap="0" />
        </s:layout>
</s:List>

答案 2 :(得分:0)

((list.dataGroup.layout) as VerticalLayout).rowCount可能正是您所寻找的。