2011-06-14 63 views
1

我有一個黑莓手機的Flex應用程序,有一個窗體。有一個TextArea輸入,當「聚焦」時,用全屏文本區域推動新視圖。當全屏幕文本區域被填滿,一個按鈕被點擊,屏幕彈出原來的形態......PopView到屏幕上的位置我們在

問題: 當我跳出這個第2屏幕,它返回到第一種形式的頂部,不保留我們在頁面上的視圖位置......是否有返回到我們正在編輯的窗體部分?

+1

劇本設備太麻煩了,我認爲你不能這樣做。推薦+1 – Eugeny89 2011-06-14 08:43:14

回答

2

您可以使用包含最後一個滾動座標的參數[1]來推編輯視圖,以及在彈出[2]視圖時可以將這些座標設置爲返回值,因此第一個窗體視圖可以向後滾動下來[3]。

[1]的pushView的第二個參數需要的任何對象:

navigator.pushView(EditView, {position:"someValue"}); 

[2]重寫createReturnObject創建坡平視圖時一個返回對象:

public function createReturnObject():Object 

[3]中的viewActivate eventhandler data - 屬性將保存您的推送對象。

1

從alopix的迴應中獲得靈感,我提出了在整個應用程序中工作的以下解決方案。我不得不延長View類:

MyView.as

這需要以使得示出下每次視圖變得激活(被認爲),其verticalScrollPosition的將被存儲在全局變量中的值( )。 「mainContent」是MyGroup的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的全局變量,我不得不保存所有Y名爲verticalPositionTracker一個全局變量座標。這是剛剛的 「頁面標題」=> verticalScrollPosition的(如Y座標。)例如對象:

  1. 登錄頁面 - > 120
  2. 結果頁面 - > 200
  3. 等等

    <?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)時,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; 
    } 
} 

結果。MXML(工作實施例) 我然後該組中包含的視圖用的「搜索Maincontent」的ID(重要,因爲它允許視圖知道哪個組設置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> 
+0

從別人身上獲取靈感是一種糟糕的形式,但要給自己「正確答案」。更好的是:給予@alopix「正確答案」的讚譽並對他評論,並說:「這對我來說非常有幫助!看到我終於想出了我的答案。」 – 2011-06-16 11:05:33

+0

夠公平,但alopix的答案並不完整,因爲我們必須繼續通過y座標。如果我們離開那個頁面然後回來,那麼滾動位置就會丟失。此外,如果我們的應用程序已經傳遞了關於它的可能的數據,我們將不得不改變我們的整個應用程序以適應這一點。即使他的解決方案沒有完成,也給他一個+和一個勾號,也不是真的與我的類似......新手到這個線程將自動使用他的解決方案,因爲他有勾號 – 2011-06-16 11:13:41

+0

這就是爲什麼你在底部添加註釋他的。本網站不是提出完整的解決方案。這是關於給出想法和答案,以幫助您獲得完整的解決方案。特別是如果問題/答案很複雜。 – 2011-06-16 16:43:01