WebView的滚动与canGoBack()与goBack()-Android

> 监听WebView是否在滚动
监听WebView是否在滚动?- https://blog.csdn.net/buniannian/article/details/79012397
Android实现真正的禁止WebView滚动?- https://blog.csdn.net/qq_33756493/article/details/69948549

> WebView canGoBack()与goBack()
Android WebView 因重定向无法正常goBack()解决方案- http://blog.csdn.net/t12x3456/article/details/39134961
@Override  
public boolean onKeyDown(int keyCode, KeyEvent event) {  
    //先拼出intent传进来的url的完整url  
    String webViewUrl = webUrl + "/html/index.html";  
    //打印 按下后退键时,webview的url是什么  
    Log.i("webViewUrl:", webView.getUrl());  
    //多加一个判断 如果当前url和intent传进来的url是相等的 取反->走closeActivity()  
    if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack() && !webViewUrl.equals(webView  
            .getUrl())) {  
        webView.goBack();  
        return true;  
    } else {  
        closeActivity();  
    }  
    return super.onKeyDown(keyCode, event);  
}  
  
private void closeActivity() {  
    if (webView != null) {  
        final ViewGroup viewGroup = (ViewGroup) webView.getParent();  
        if (viewGroup != null) {  
            viewGroup.removeView(webView);  
        }  
        webView.destroy();  
    }  
    finish();  
}  

-- 初始页面为A,点击某个链接跳转到B(http://xxx.com.cn/),B页面重定向到C页面(http://xxx.com.cn/website/index.html),当调用webview.goBack()时,页面回退到B,然后接着会重定向回C页面
这样会导致问题:无法回退到webview的初始页面A,解决方案就是:
声明历史栈:private List<String> loadUrls = new ArrayList<String>();  
public boolean shouldOverrideUrlLoading(WebView view,String url){  
        //将过滤到的url加入历史栈中  
          loadUrls.add(url);  
          return true;            
       } 

在返回的时候做如下处理:
if (mWebView.canGoBack()) {
  try {
     if (loadUrls.size()  > 0 && loadUrls.get(loadUrls.size() - 1).contains("http://xxxxx" +".com")) {
         loadUrls.remove(loadUrls.get(loadUrls.size() - 1));//移除加载栈中的最后两个链接
     }
     loadUrls.remove(loadUrls.get(loadUrls.size() - 1));//移除加载栈中的最后两个链接
     //加载重定向之前的页
     mWebView.loadUrl(loadUrls.get(loadUrls.size() - 1));
  } catch (Exception e) {
      e.printStackTrace();
  }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值