java – 如何为了向后兼容而覆盖不推荐的重载方法?

我在
Android Studio工作,我使用WebView处理我的应用程序中的网页.我想跟踪此网页中的网址重定向,以便我能够在正确的时间移动到下一个活动.

可以通过覆盖WebViewClient类方法’shouldOverrideUrlLoading’来执行此URL跟踪,以允许我转发到特定URL的新活动.但是,’shouldOverrideUrlLoading’有两种实现方式:

shouldOverrideUrlLoading(WebView view,  String url)
shouldOverrideUrlLoading(WebView view,  WebResourceRequest request)

第一个(方法结束String url)已弃用.当我希望我的应用程序针对API级别15及更高级别时,上面显示的第二种方法仅适用于API级别21.

我理解这是否只是标准代码(不是方法覆盖)我可以从Android手机中提取API级别,然后根据检索到的级别执行任何方法.但我不知道如何根据手机的API级别为用户指定哪些重载方法.

此外,我得到一个红色波浪形警告我一个调用需要API级别21,但我相信这仍然会编译,只有在API 21以下调用时崩溃?

以下是重写的重载方法的两个版本:

这是不推荐使用的方法:

    WebView myWebView = (WebView) findViewById(R.id.webview);
    myWebView.setWebViewClient(new WebViewClient(){
        @Override
        public boolean shouldOverrideUrlLoading(WebView view,  String url) {
            if(url.equals("test")) {
                return true;
            }
            return false;
        }
    });

这是该方法的新版本,其中’WebResourceRequest’仅在API级别21中受支持:

    WebView myWebView = (WebView) findViewById(R.id.webview);
    myWebView.setWebViewClient(new WebViewClient(){
        @Override
        public boolean shouldOverrideUrlLoading(WebView view,  WebResourceRequest request) {
            if(request.getUrl().equals("test")) {
                return true;
            }
            return false;
        }
    });

无论如何要么指定在某些API级别使用哪种方法?因为我不知道如何在不使用弃用方法的情况下执行此操作.

最佳答案 只需创建一个同时调用的方法.

像这样的东西

    public override bool ShouldOverrideUrlLoading(WebView view, string url)
    {
        return HandleUrlLoading(view,url);
    }

    public override bool ShouldOverrideUrlLoading(WebView view, IWebResourceRequest request)
    {
        string url = request.Url.ToString();
        return HandleUrlLoading(view, url);
    }

    private bool HandleUrlLoading(WebView view, string url)
    {
        if(url.equals("test")) {
            return true;
        }
        return false;
    }
点赞