2014-06-17 65 views
3

在Android上使用sencha觸摸應用時,設備後退按鈕是否可以完全表現爲原生Andriod應用? This線程解決了同樣的問題。建議的解決方案是在Android的sencha應用中重寫後退按鈕

if (Ext.os.is('Android')) { 
    document.addEventListener("backbutton", Ext.bind(onBackKeyDown, this), false); 

    function onBackKeyDown(eve) { 

     eve.preventDefault(); 

     //do something 
     alert('back button pressed'); 

    } 
} 

但在此功能,我該如何去以前訪問過的屏幕?

回答

2

當然,這取決於您的用戶界面的構建方式以及視圖的連接方式。我能想到的最簡單的方法是以某種方式檢測頁面中後退按鈕的存在並觸發點擊。

在我的應用程序每一個需要處理backbutton事件視圖與cls = 'back'一個按鈕,實現tap監聽器負責返回到上一個視圖的邏輯。

關於如何實現這個邏輯:這裏沒有魔杖。如果一個特定的視圖可以通過一個父視圖來訪問,那麼你可以對它進行硬編碼。否則,如果一個視圖可以從多個視圖中獲取,我在視圖的控制器的屬性中保存對我來自的視圖的引用,然後在後退的tap上移動到該視圖。

移動到視圖的動畫通常可以通過Ext.Viewport.animateActiveItem(parentView, {type: 'fade'});獲得(但同樣這取決於你如何實現你的看法樹)

所以在我的處理程序backbutton我檢查了這樣一個按鈕,[cls=back](但你也可以檢查ui或任何你想要的),並且我發動了它的tap事件。 此外,當我檢測到我在根視圖上時,我詢問用戶是否要退出該應用程序,如果是這樣,我打電話給exit()

_handleBackButtonEvent : function(e) { 

    // First look if the current view is the mainView 
    var item = Ext.Viewport.getActiveItem(); 

    // If we are on mainView, quit. 
    // Sayonara, goodbye, adios 
    if (item.getId() === 'mainView') { 
     navigator.notification.confirm(
      "Really quit?", 
      function(option) { 
       if (option == 1) { 
        navigator.app.exitApp(); 
       } 
      }, 
      "Confirm", 
      "Yes,No" 
     ); 
    } else { 
     // else look if the current view has a backbutton 
     var titlebar = item.down('titlebar[docked=top]'); 
     var backbutton = null; 

     if (titlebar) { 
      backbutton = titlebar.down('button[iconCls=back]'); 
     } 

     if (backbutton && !backbutton.isHidden() && !backbutton.isDisabled()) { 
      backbutton.fireEvent('tap'); 
     } else { 
      // if not, fallback to mainView 
      item = Ext.getCmp('mainView'); 
      Ext.Viewport.animateActiveItem(item, {type: 'slide', direction: 'right'}); 
     } 

    } 

    e.preventDefault(); 
} 
+0

'後退按鈕的存在'意味着我將不得不使用導航視圖嗎? – Diffy

+0

沒有。我將進一步解釋我的觀點,使之更加清晰。 –

+0

這個按鈕是否帶有由sencha控制的iconCls =後退,這樣當我們點擊它時,它會帶我們前一個視圖,而不寫任何邏輯。我可以讓它看不見,因爲我沒有這樣的按鈕在我的應用程序? – Diffy