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();


你可能感兴趣的:(Android,日常)