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。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值