您的位置:首页 > 移动开发

android webview 解决回退重定向的问题

2017-06-20 10:26 666 查看
public class MainActivity extends AppCompatActivity {

private WebView webview;
private MyWebViewClient webViewClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webview = (WebView) findViewById(R.id.webview);
webViewClient = new MyWebViewClient();
webview.getSettings().setJavaScriptEnabled(true);
webview.setWebViewClient(webViewClient);
webview.loadUrl("https://m.taobao.com/");
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
return pageGoBack(webview,webViewClient);
}

public boolean pageGoBack(WebView web, MyWebViewClient client) {
final String url = client.popLastPageUrl();
if (url != null) {
web.loadUrl(url);
return true;
}
finish();
return false;
}

class MyWebViewClient extends WebViewClient{
/**
* 记录URL的栈
*/
private final Stack<String> mUrls = new Stack<>();
/**
* 判断页面是否加载完成
*/
private boolean mIsLoading;
private String mUrlBeforeRedirect;

@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
if (mIsLoading && mUrls.size() > 0) {
mUrlBeforeRedirect = mUrls.pop();
}
recordUrl(url);
this.mIsLoading = true;
}

/**
* 记录非重定向链接, 避免刷新页面造成的重复入栈
*
* @param url 链接
*/
private void recordUrl(String url) {
//这里还可以根据自身业务来屏蔽一些链接被放入URL栈
if (!TextUtils.isEmpty(url) && !url.equalsIgnoreCase(getLastPageUrl())) {
mUrls.push(url);
} else if (!TextUtils.isEmpty(mUrlBeforeRedirect)) {
mUrls.push(mUrlBeforeRedirect);
mUrlBeforeRedirect = null;
}
}

/**
* 获取上一页的链接
**/
private synchronized String getLastPageUrl() {
return mUrls.size() > 0 ? mUrls.peek() : null;
}

/**
* 推出上一页链接
*/
public String popLastPageUrl() {
if (mUrls.size() >= 2) {
mUrls.pop(); //当前url
return mUrls.pop();
}
return null;
}

@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if (this.mIsLoading) {
this.mIsLoading = false;
}
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
}
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: