android webview 解决回退重定向的问题
2018-01-26 15:44
701 查看
转载自:http://blog.csdn.net/liu1164316159/article/details/73481014
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;
}
}
}
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;
}
}
}
相关文章推荐
- android webview 解决回退重定向的问题
- Android Webview重定向问题解决方法
- Android进阶---Android Webview重定向问题解决
- android webview 如何去广告和如何解决重定向返回的问题。
- android webview 如何去广告和如何解决重定向返回的问题。
- android webview内容压线问题解决方法
- 【webview】android webview 显示空白页问题解决
- android webview loadData乱码问题解决方法
- 如何解决Android WebView出现的乱码问题
- Android使用WebView无法定位问题的解决方法
- Android WebView开发中无法调音量的问题解决
- Android使用WebView嵌入网页,网页内点击跳转到另一个网页后,返回问题解决
- [android webview]android webview loadData乱码问题解决方法
- 解决Android中WebView视频无法播放的问题
- android--WebView使用addJavascriptInterface在sdk 17的问题解决
- android 橘子汁--WebView loadData 解决乱码问题
- android WebView缩放设置setInitialScale(...)后,修改设置的值,问题解决
- android webview 字体切换 反白乱的问题解决
- android :webview 解决遇到的跨域问题
- Android中的WebView进行直接加载网页(要注意解决权限问题)