我正在尝试创建自己的组件,其行为类似于列表并支持无限滚动(在一维中:垂直或水平) - 两个方向。例如,垂直布局的列表,用户可以永久地向上或向下滚动 - 而不会击中“最后”或“第一”项目。一个很好用的:一个日历,每个月显示一个列表项。
无论如何,有很多事情需要克服。我认为,第一个是禁用滚动条的弹跳效果(在最新的Flex 4.5(移动)SDK中引入)。
如果我可以禁用反弹效果,我猜我可以根据需要在列表中添加/删除项目,它会无限滚动。
有什么想法吗?
克里希纳
答案 0 :(得分:2)
就个人而言,无限列表意味着核心List组件的大量返工。逆向工程需要做很多工作,你可能会遇到困难。我想你想要做的是从头开始创建一个组件并扩展SkinnableContainer
。
从现在开始,您需要决定如何实现以及无限列表的用户交互,然后需要实施正确的实践并重用您的项目渲染器。
答案 1 :(得分:1)
根据我的经验,您可以通过将属性更改事件添加到列表的dataGroup的视口中来简单地在List组件上实现延迟加载
list.dataGroup.addEventListener( PropertyChangeEvent.PROPERTY_CHANGE, onScrollPropertyChangeHandler );
然后在事件中,听取垂直滚动位置
if ( event.property == "verticalScrollPosition" ){
var listHeight:Number = itemList.height;
var curAnchorPoint:Number = event.newValue + listHeight;
var bottomPositionToLoad:Number = 200; // Start loading when the list nearly reach the bottom minus 200
var anchorToLoadNextPage:Number = itemList.dataGroup.contentHeight - bottomPositionToLoad;
if(curAnchorPoint >= anchorToLoadNextPage){
loadNextPage();
}
}
当loadNextPage()正在运行时,请记住删除属性更改事件,以便不会多次调用loadNextPage。