> 监听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();
}
}