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

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;  

        }  

    }  

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