1. 程式人生 > >Android混合開發之——WebView頁面棧遇上重定向

Android混合開發之——WebView頁面棧遇上重定向

場景:我們的現在開發的App基本都會嵌入一些網頁是內容更加的豐滿。我們在網頁展示頁面想點選返回鍵退出到前一個頁面。當退出到最開始的頁面的時候直接退出當前的Activity。通常的做法是,監聽返回鍵,判斷頁面棧是否可以回退。

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event){
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){
            if
(showLoadingWeb.canGoBack()){ showLoadingWeb.goBack(); }else { finish(); overridePendingTransition(R.anim.left_fadein,R.anim.left_fadeout); } return true; }else { return super.onKeyDown(keyCode , event
); } }

但是,當我們起步時載入的頁面含有重定向操作的時候再用這一套邏輯就體驗很差了,會給使用者一種永遠退不出去的感覺。這就需要動態的檢視WebView頁面棧,根據頁面棧中的頁面的數量控制Activity的關閉。

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event){
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){
            if
(showLoadingWeb.canGoBack()){ if (showLoadingWeb.copyBackForwardList().getSize()<=2){ finish(); overridePendingTransition(R.anim.left_fadein,R.anim.left_fadeout); }else { showLoadingWeb.goBack(); } }else { finish(); overridePendingTransition(R.anim.left_fadein,R.anim.left_fadeout); } return true; }else { return super.onKeyDown(keyCode , event); } } //WebBackForwardList list = webViewInstance.copyBackForwardList(); //以上註釋是對核心程式碼的一個解釋說明 這樣會看的更清晰一點

以上程式碼中,當頁面棧大小為2的時候,就是使用者視角下的根頁面。但是它並沒有達到頁面棧的棧底,通過canGoBack()判斷依然是返回true的。於是乎簡單粗暴的判斷頁面棧的數量小於2直接關閉Activity。