从 alopix 的回复中汲取灵感,我想出了以下适用于整个应用程序的解决方案。我必须扩展 View 类:
MyView.as
这是必要的,以便每次视图激活(被查看)时,它的verticalScrollPosition 将存储在全局变量中的值(如下所示)。 “mainContent”是存储实际 MXML 视图中所有内容的 MyGroup 的 ID(因此我们可以跟踪它并更新它的 verticalScrollPosition)。
public class MyView extends View
{
public function MyView()
{
super();
this.addEventListener(FlexEvent.VIEW_ACTIVATE, goToCorrectViewpoint);
}
private function goToCorrectViewpoint(e:Event):void{
trace("Setting vertical position to "+FlexGlobals.topLevelApplication.verticalPositionTracker[this.title]);
if(FlexGlobals.topLevelApplication.verticalPositionTracker.hasOwnProperty(this.title))
(this["mainContent"] as Group).verticalScrollPosition = FlexGlobals.topLevelApplication.verticalPositionTracker[this.title];
}
}
用于存储每个Page的verticalScrollPosition的全局变量
我必须将所有 Y 坐标存储在一个名为 verticalPositionTracker 的全局变量中。这只是“页面标题”的对象 => verticalScrollPosition(例如 Y 坐标)例如:
- 登录页面 -> 120
- 结果页面 ->200
-
等等……
<?xml version="1.0" encoding="utf-8"?>
<s:MobileApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark" firstView="view.LoginView" backgroundColor="0xF5FAFF">
<fx:Script>
<![CDATA[
public var verticalPositionTracker:Object = new Object();
]]>
</fx:Script>
</s:MobileApplication>
我的组
然后我必须创建一个自定义组(它将包含滚动条中的所有数据),以便当用户向下滚动页面(更改垂直滚动位置)时,全局变量将使用新位置进行更新。
public class AirpointGroup extends VGroup
{
public var pageID:String;
public function AirpointGroup()
{
super();
}
override public function set verticalScrollPosition(value:Number):void{
if (layout)
{
layout.verticalScrollPosition = value;
}
trace("The position of "+this.pageID+" has changed to "+value);
if(value!=0)
FlexGlobals.topLevelApplication.verticalPositionTracker[pageID] = value;
}
}
Results.mxml(工作示例)
然后我将该组包含在 ID 为“mainContent”的视图中(这很重要,因为它允许视图知道将 y 坐标设置到哪个组)
<?xml version="1.0" encoding="utf-8"?>
<components:MyView xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:components="components.*"
xmlns:s="library://ns.adobe.com/flex/spark" title="Tasks" xmlns:mx="library://ns.adobe.com/flex/mx">
<s:Scroller left="0" right="0" top="0" bottom="0">
<components:MyGroup pageID="{this.title}" id="mainContent">
<!-- ALL CONTENT GOES HERE -->
</components:MyGroup>
</s:Scroller>
</components:MyView>