PopView到屏幕上我们所在的位置

| 我有一个具有表单的Blackberry剧本Flex应用程序。有一个TextArea输入,当\“ focused in \”时,将推送具有全屏文本区域的新视图。填满该全屏文本区域后,单击一个按钮,然后将屏幕弹出到原始表单... 问题: 当我弹出第二个屏幕时,它返回到顶部的第一个表单,而不保留我们在页面上的视图位置...反正返回到我们正在编辑的表单部分吗?     
已邀请:
        您可以使用包含最后滚动坐标的参数[1]推送编辑视图,并在弹出[2]视图时可以将这些坐标设置为返回值,因此第一个表单视图可以向下滚动[3] 。 [1]
pushView
的第二个参数采用任何对象:
navigator.pushView(EditView, {position:\"someValue\"});
[2]弹出视图时,覆盖ѭ2来创建返回对象:
public function createReturnObject():Object
[3]在viewActivate事件处理程序中,
data
属性将保留您的推送对象。     
        从alopix的响应中获得启发,我提出了以下解决方案,该解决方案适用于整个应用程序。我必须扩展View类: MyView.as 这是必需的,以便每次视图变为活动状态(被查看)时,其verticalScrollPosition都将值存储在全局变量中(如下所示)。 \“ mainContent \”是MyGroup的ID,该ID将所有内容存储在实际的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的Global变量 我必须将所有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>
我的组 然后,我必须创建一个自定义组(它将包含滚动条中的所有数据),以便当用户向下滚动页面(更改verticalScrollPosition)时,将使用新位置更新Global变量。
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>
    

要回复问题请先登录注册