Android WebView重定向GOBACK問題

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/ContainsK/article/details/57414784

問題:最近項目中遇到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();


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章