这是之前我发的一个贴子问题描述:http://q.cnblogs.com/q/53469/
问题:当点击了页面的刷新后,滚动条总是回到了最上面的位置,无法保持与之前的位置一样
解决问题的方法:
在点击Refresh的时候保存verticalScrollPosition 和horizontalScrollPosition 的值, 当刷新完后查询了新的数据后设置dataGrid 的verticalScrollPosition 等于之前保存的值,这个方法原本是正确的,但是在我的UI却一直没有效果。后来想的办法是我设置了一个定时器 private var setScrollPos:Timer = new Timer(50);
当刷新完回到前台处理完数据后,启用这个定时器,调用setScrollPos方法给DataGrid的scrollbar的verticalScrollPosition赋值
这个方法是当查询完数据后返回到前台,前台处理数据的方法
private function enablePanle(e:Event):void
{
monitor_grid_container.enabled = true;
//when completed fetch runs arrived, validate which run should be expand.
if(isRefresh)
{
for each(var runBean:RunBean in model.runBeans)
{
for each(var openRunBean:RunBean in openRunBeans)
{
if(runBean.wkfName == openRunBean.wkfName)
runs_grid_datagrid.expandItem(runBean,true);
if(runBean.childRunBeans)
{
for each(var childRunBean:RunBean in runBean.childRunBeans)
{
if(openRunBean.wkfName == childRunBean.wkfName)
runs_grid_datagrid.expandItem(childRunBean,true);
}
}
}
}
}
refresh_button.enabled = true;
var hDataProvider:HierarchicalData = new HierarchicalData(model.runBeans);
hDataProvider.childrenField = "childRunBeans";
runs_grid_datagrid.dataProvider = hDataProvider;
if (model.runBeans.length != 0)
runs_grid_datagrid.contextMenu = buildMatrixContextMenu();
buildInfo();
setScrollPos.addEventListener(TimerEvent.TIMER, setScollPos);
setScrollPos.start();
}
public function setScollPos():void
{
arguments;
runs_grid_datagrid.verticalScrollPosition = myVerPos;
setScrollPos.stop();
}
今天又找了一种实现方法,不必声明定时器, flex有一个自带的方法callLater可以实现,关于此方法的学习:http://help.adobe.com/zh_CN/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7b06.html
在我的项目中: 把以上的红色字体的代码改正为 callLater(setScollPos);