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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章