2012-02-13 44 views
0

我開發基於教程之一的小型RSS閱讀器。這是一個在HomeView上的簡單應用程序,當用戶單擊RSS項目標題時,然後應用程序在DetailsView.mxml上推送視圖。但我有一個小問題。我在HomeView中包含了一個刷新按鈕,但是每當我在列表中滾動或單擊項目時,然後再回到HomeView列表上時都會刷新。這使用了很多互聯網連接。是否有可能使這個應用程序,以便當應用程序打開,然後加載(刷新)列表,然後刷新按下按鈕「刷新」?Flex 4.5:僅在應用程序打開時刷新並單擊按鈕

P.S.請,我需要簡單的解釋,我真的不是一個程序員:)

感謝您的幫助,在這裏是HomeView源代碼:

<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:rssreader="services.rssreader.*" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     title="Elektro-Vozila" viewActivate="getData()"> 

    <fx:Script> 
     <![CDATA[ 
      import spark.events.IndexChangeEvent; 

      protected function getData():void 
      { 
       getDataResult.token = rssreader.getData(); 
      } 

      import mx.events.CollectionEvent; 
      import valueObjects.Item; 

      protected function fixEntityReferences(event:CollectionEvent):void 
      { 
       myList.labelFunction = replaceEntity; 

       function replaceEntity(item:Item):String 
       { 
        var p1:RegExp = /(&quot;)/ig; // perhaps add more here later 
        var thisString:String = item.title.replace(p1, ""); 
        trace(thisString); 
        return thisString; 

       } 
      } 

      protected function myList_changeHandler(event:IndexChangeEvent):void 
      { 

       var RSSItem:Object = myList.dataProvider.getItemAt(event.newIndex); 
       navigator.pushView(DetailsView, RSSItem); 
      } 

      private function refreshList():void 

      { 

        Object(navigator.activeView).getData(); 

      } 
     ]]> 

    </fx:Script> 
    <s:actionContent> 
     <s:Button label="Refresh" 
        click="refreshList()"/> 
    </s:actionContent> 
    <fx:Declarations> 
     <s:CallResponder id="getDataResult"/> 
     <rssreader:Rssreader id="rssreader"/> 
     <s:CallResponder id="getDataResult2"/> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 
    <s:List bottom="0" 
      change="myList_changeHandler(event)" 
      id="myList" 
      itemRenderer="views.IconItemRenderer" 
      labelField="title" 
      left="0" 
      right="0" 
      top="0"> 
     <s:AsyncListView list="{getDataResult.lastResult}" 
         collectionChange="fixEntityReferences(event)"/> 

    </s:List> 
</s:View> 

回答

0

Roky嗨,

 private var dataLoaded : Boolean = false; 

     protected function getData(force : Boolean = false) : void 
     { 
      if (!dataLoaded || force) 
      { 
       getDataResult.token = rssreader.getData(); 
       dataLoaded = true; 
      } 
     } 

在你刷新按鈕,您可以調用getData(true)強制刷新即使數據已經加載。

+0

Heeey Shaun「好人」:))我有這個代碼的一個錯誤。在線「受保護的函數getData(force:Boolean = false):void」錯誤是:1021:重複的函數定義。 – Roky 2012-02-14 23:02:51

+0

您必須粘貼但不能替換現有的。 AS3不允許重載方法,這就是你所要做的。重載是指你有不同的「簽名」,也就是說方法調用的數據類型不同,但方法名稱相同。 AS3不允許你這麼做,所以你必須將這個粘貼到你現有的方法上......或者現在你有兩個刪除你的舊方法。 – shaunhusain 2012-02-14 23:10:04

+0

很高興我仍然有來源:) – shaunhusain 2012-02-14 23:10:29

相關問題