我正在使用FB4,显然我需要使用ensureIndexIsVisible()
滚动到我的s:List
中的特定项目。无论如何,下面的代码成功滚动到项目,但不会将其滚动到列表的顶部(它位于底部,并在某种程度上切断)。反正有吗?
MXML:
<s:List id="Schedule" dataProvider="{schedule}" creationComplete="creationCompleteHandler(event)"/>
AS3:
protected function creationCompleteHandler(event:Event):void {
var d:Date = new Date();
var today:String = String((d.month + 1) + "/" + d.date + "/" + d.fullYear);
var dP:XMLListCollection = event.currentTarget.dataProvider;
for(var i:uint; i < dP.length; i++){
if(dP.child("date")[i] == today){
event.currentTarget.ensureIndexIsVisible(i);
}
}
}
答案 0 :(得分:1)
糟糕的解决方案,但它对我有用
var pt:Point = list.layout.getScrollPositionDeltaToElement(i);
while (pt) {
list.validateNow();
if (pt.y > 0) {
var delta:int = list.layout.getVerticalScrollPositionDelta(NavigationUnit.DOWN);
} else {
delta = list.layout.getVerticalScrollPositionDelta(NavigationUnit.UP);
}
list.layout.verticalScrollPosition += delta;
pt = list.layout.getScrollPositionDeltaToElement(i);
}
答案 1 :(得分:1)
能够找到一个更简单的解决方案 - 在此处发布,因为没有其他人似乎在网上发布了类似的内容。
方法 spark.layouts.supportClasses.LayoutBase #getScrollPositionDeltaToElementHelper 允许传入topOffset,但默认实现传递NaN。如果创建一个通过&#34; 0&#34;作为topOffset,然后在List上调用 ensureIndexIsVisible 将导致该索引处的项目顶部对齐。
请参阅下面的自定义布局类:
public class ScrollToElementVerticalLayout extends VerticalLayout
{
public override function getScrollPositionDeltaToElement(index:int):Point
{
// pass 0 as the topOffset so the element aligns with the top of the list
return getScrollPositionDeltaToElementHelper(index, 0);
}
}
答案 2 :(得分:0)
这是Flex 4中Spark列表的简单单行程序:
list.layout.verticalScrollPosition = list.layout.getElementBounds(list.selectedIndex).y;