其实,网上关于这个问题的博客很多,但几乎都是坑,基本都是copy。由于,自己也被坑的太狠了。所以打算自己找规律,然后解决。最后,发现真心不难,很简单。就是一个逻辑问题。
规律:重定向时,shouldOverrideUrlLoading 两次加载的链接是一样的,不信自己可以试试。
废话不说直接上代码:
private List<String>
urlCollection:装载url的集合
prevUrl:为之前的链接地址,latestUrl: 为最新的链接地址。
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (!TextUtils.isEmpty(url)) {
latestUrl = url;
if (prevUrl.equals(latestUrl)) {
finish();
} else {
view.loadUrl(url);
prevUrl = url;
urlCollection.add(prevUrl );
}
}
return true;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
goBack();
return false;
} else {
return super.onKeyDown(keyCode, event);
}
}
private void goBack() {
if (webView != null) {
if (webView.canGoBack()) {
if (latestUrl==null){
finish();
setResult(RESULT_OK);
}else {
webView.goBack();
if (urlCollection!=null &&
urlCollection.size()>0){
prevUrl=urlCollection.get(urlCollection.size()-2);
urlCollection.remove(urlCollection.size()-1);
}
}
}else {
finish();
setResult(RESULT_OK);
}
}
}
最后想说的是,有什么问题,欢迎一起探讨。