2015-03-02 33 views
4

我們正在使用Crosswalk項目在我們的Android應用程序中實現Web視圖。據我所知,Crosswalk會跟蹤應用程序是否可以返回到網站(getNavigationHistory()),如果用戶在根目錄下,它會在用戶再次按下後退按鈕時暫停活動。後退按鈕銷燬Crosswalk中的活動Android

場景的作品,因爲它應該:

  1. 用戶啓動應用程序,並認爲該指數
  2. 用戶按一個鏈接轉到另一個頁面
  3. 用戶進入到另一條鏈路
  4. 用戶按他的手機上的後退按鈕,並看到他在步驟#2上看到的頁面
  5. 用戶再次按下後退按鈕返回索引
  6. U SER按回來,現在的應用程序被暫停

繼續在以前的方案,但會破壞應用程序:

  • 用戶再次啓動該應用程序(恢復它)
  • 用戶按後退按鈕
  • 該活動應該暫停,但會被銷燬。
  • 所以我想知道這是標準行爲還是Crosswalk中的錯誤?

    我希望應用程序每次用戶按下後退按鈕時都會暫停。

    我試圖覆蓋標準背面行爲,但是這仍然破壞了第二次回壓的活動:

    @Override 
    public void onBackPressed() { 
        DebugFunctions.showToast(mThis, "onBackPressed"); 
        DebugFunctions.showLog(LOG_TAG, "onBackPressed"); 
    
        DebugFunctions.showLog(LOG_TAG, "mXWalkView: " + String.valueOf(mXWalkView != null) + ", canGoBack: " + String.valueOf(mXWalkView.getNavigationHistory().canGoBack())); 
    
        if (mXWalkView != null && mXWalkView.getNavigationHistory().canGoBack()) { 
         DebugFunctions.showLog(LOG_TAG, "First"); 
         mXWalkView.getNavigationHistory().navigate(XWalkNavigationHistory.Direction.BACKWARD, 1); 
        } else { 
         DebugFunctions.showLog(LOG_TAG, "Second"); 
         moveTaskToBack(true); 
        } 
    } 
    

    另一種看法是,後退按鈕破壞,即使我已經按下了活動鏈接(Crosswalk應該註冊)在第二次啓動應用程序時。

    +0

    我沒有Crosswalk的使用經驗,但按下後退按鈕時會破壞活動是標準的android行爲。引用來源:http://developer.android.com/guide/components/tasks-and-back-stack.html 當用戶按下「後退」按鈕時,當前活動從堆棧頂部彈出(活動被銷燬)並且前面的活動恢復(其UI的前一狀態被恢復)。 – 2015-03-02 08:58:57

    +0

    但是,在第一次背按時,應用程序暫停,然後在第二次按下時,我甚至無法導航迴應用程序,因爲它只是完全關閉了應用程序,這不奇怪嗎? – jwanglof 2015-03-03 10:01:17

    +0

    對我來說,人行橫道網絡視圖的歷史堆棧中的第一頁是「about:blank」。導航回到它創建一個空白/黑色的屏幕,看起來像視圖被摧毀。但它並不是它只是在瀏覽器中顯示的合法空白頁面。 – Twilite 2016-08-12 14:50:54

    回答

    0

    我用這個函數返回xwalkview。它運作良好。

    public boolean onKeyDown(int keyCode, KeyEvent event) { 
        //WebView mWebView = (WebView) findViewById(R.id.webview); 
        XWalkView mXWalkView = (XWalkView) findViewById(R.id.xWalkView); 
        if (event.getAction() == KeyEvent.ACTION_DOWN) { 
         switch (keyCode) { 
          case KeyEvent.KEYCODE_BACK: 
    
           if (mXWalkView.getNavigationHistory().canGoBack()) { 
            mXWalkView.getNavigationHistory().navigate(XWalkNavigationHistory.Direction.BACKWARD, 1) ; 
           } else { 
            finish(); 
            if (MainActivity.mTencent.isSessionValid()) { 
             MainActivity.logout(); 
            } 
           } 
           return true; 
         } 
    
        } 
        return super.onKeyDown(keyCode, event); 
    }