我有一個黑莓手機的Flex應用程序,有一個窗體。有一個TextArea輸入,當「聚焦」時,用全屏文本區域推動新視圖。當全屏幕文本區域被填滿,一個按鈕被點擊,屏幕彈出原來的形態......PopView到屏幕上的位置我們在
問題: 當我跳出這個第2屏幕,它返回到第一種形式的頂部,不保留我們在頁面上的視圖位置......是否有返回到我們正在編輯的窗體部分?
我有一個黑莓手機的Flex應用程序,有一個窗體。有一個TextArea輸入,當「聚焦」時,用全屏文本區域推動新視圖。當全屏幕文本區域被填滿,一個按鈕被點擊,屏幕彈出原來的形態......PopView到屏幕上的位置我們在
問題: 當我跳出這個第2屏幕,它返回到第一種形式的頂部,不保留我們在頁面上的視圖位置......是否有返回到我們正在編輯的窗體部分?
您可以使用包含最後一個滾動座標的參數[1]來推編輯視圖,以及在彈出[2]視圖時可以將這些座標設置爲返回值,因此第一個窗體視圖可以向後滾動下來[3]。
[1]的pushView
的第二個參數需要的任何對象:
navigator.pushView(EditView, {position:"someValue"});
[2]重寫createReturnObject
創建坡平視圖時一個返回對象:
public function createReturnObject():Object
[3]中的viewActivate eventhandler data
- 屬性將保存您的推送對象。
從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座標。)例如對象:
等等
<?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>
從別人身上獲取靈感是一種糟糕的形式,但要給自己「正確答案」。更好的是:給予@alopix「正確答案」的讚譽並對他評論,並說:「這對我來說非常有幫助!看到我終於想出了我的答案。」 – 2011-06-16 11:05:33
夠公平,但alopix的答案並不完整,因爲我們必須繼續通過y座標。如果我們離開那個頁面然後回來,那麼滾動位置就會丟失。此外,如果我們的應用程序已經傳遞了關於它的可能的數據,我們將不得不改變我們的整個應用程序以適應這一點。即使他的解決方案沒有完成,也給他一個+和一個勾號,也不是真的與我的類似......新手到這個線程將自動使用他的解決方案,因爲他有勾號 – 2011-06-16 11:13:41
這就是爲什麼你在底部添加註釋他的。本網站不是提出完整的解決方案。這是關於給出想法和答案,以幫助您獲得完整的解決方案。特別是如果問題/答案很複雜。 – 2011-06-16 16:43:01
劇本設備太麻煩了,我認爲你不能這樣做。推薦+1 – Eugeny89 2011-06-14 08:43:14