Вдохновившись ответом alopix, я нашел следующее решение, которое работало во всем приложении.Я должен расширить класс View:
MyView.as
Это было необходимо для того, чтобы каждый раз, когда представление становилось активным (просматривалось), его вертикальScrollPosition сохраняласьзначение в глобальной переменной (показано далее).«mainContent» - это идентификатор MyGroup, который хранит все в фактическом представлении MXML (поэтому мы можем отслеживать его и обновлять его 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];
}
}
Глобальная переменная для хранения verticalScrollPosition каждогоСтраница
Мне пришлось хранить все координаты Y в глобальной переменной verticalPositionTracker.Это был просто объект "Page Title" => 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>
MyGroup
Затем мне пришлось создать пользовательскую группу (которая будет содержатьвсе данные в скроллере), поэтому, когда пользователь прокручивает страницу вниз (изменяя verticalScrollPosition), глобальная переменная будет обновлена с новой позицией.
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 (Рабочий пример) Затем я включил эту группу в представление с идентификатором "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>