首页 > 系统 > Android > 正文

Android WebView重定向GOBACK问题

2019-11-07 23:07:08
字体:
来源:转载
供稿:网友

问题:最近项目中遇到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();


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表