2012-09-23 19 views
0

我正在與Flex的ViewNavigatorApplication工作,我想弄清楚如何正確使用navigator導航瀏覽器上的ViewNavigatorApplication上Flex 4.6

我的問題是,如果你具備以下條件:

<?xml version="1.0" encoding="utf-8"?> 
<s:ViewNavigatorApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
          xmlns:s="library://ns.adobe.com/flex/spark" 
          firstView="views.IntroView"> 

    <s:navigationContent> 
     <s:Button label="Home" click="navigator.popToFirstView()"/> 
     <s:Button label="Start" click="navigator.pushView(StartView)"/> 
    </s:navigationContent> 
</s:ViewNavigatorApplication> 

並按Start按鈕多次上的StartView多個實例被創建,這是合理的,因爲這是或多或少的堆棧觀點。您可以通過點擊移動設備的後退按鈕來確認。

有沒有一種方法可以輕鬆避免這種情況,還是我必須編寫一個(相當複雜的)「控制器」來跟蹤內容並確保每個視圖只有一個實例可以被推送,其中popView()的地方需要和什麼。

我似乎無法找到任何文檔,但如果我錯過了某些內容,請與我分享。

謝謝!

回答

2

如果您的StartView課程擴展了View課程,您可以將它的destructionPolicy屬性設置爲「從不」。這將使ViewNavigator重新使用該特定視圖,而不是在每次導航時都創建一個新視圖。

對於像這樣被重用的東西,在Flex中很典型,但在移動應用中,Adobe似乎在釋放內存方面犯了錯誤。

+0

我會嘗試這個,我想它應該工作。但即使關於銷燬政策的文件也不會提及「從不」意味着ViewNavigator將重新使用它。謝謝! – alkar

+0

不幸的是,沒有工作 – alkar

+1

對不起,我想我誤解了你的問題。也許你可以在你的點擊處理程序中使用'ViewViewer'的'activeView'屬性,並且只有當!(navigator.activeView是StartView)時纔會推動StartView,或者使用同樣的邏輯來禁用按鈕。 –