Android WebView重定向GOBACK问题
发布时间
阅读量:
阅读量
问题 :最近项目中遇到WebView在重定向时GOBACK不好用了!我在webview进行表单提交后,返回列表显示提交成功,GOBACK后又进行了一次表单提交....就这样一直循环。
分析 :URLx--》URLa --》 URLb--》表单提交(重定向) --》URLa 根据需求,这时候我们在URLa GOBACK应该是返回到URLx的,但是因为有重定向,它会返回到 "表单提交(重定向)"//相当于又提交了一次。
解决思路 :建立一个url列表栈,将加载完毕的URL加入到栈,如果当前URL已经进入栈则清除它上面的其他URL 有点像Android里的SingleTop模式。
代码:
// WebView 配置
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
// 添加到url栈
addUrlStack(url);
}
});
// 添加url栈
protected void addUrlStack(String url) {
// TODO Auto-generated method stub
boolean isx = false;
for (int i = 0; i < urlStack.size(); i++) {
if (isx) {
urlStack.remove(i--);
continue;
}
String stack = urlStack.get(i);
if (stack.equals(url)) {
isx = true;
continue;
}
}
if (!isx)
urlStack.add(url);
}
// GOBACK
protected void webviewGoBack() {
if (urlStack.size() < 2)
finish();
else {
urlStack.remove(urlStack.size() - 1);
String url = urlStack.get(urlStack.size() - 1);
mWebView.loadUrl(url);
}
}
然后在需要GOBACK 的地方直接调用 webviewGoBack();
**
**
全部评论 (0)
还没有任何评论哟~
