4

我正在使用这种方法 - 并且返回truesuper.shouldOverrideUrlLoading(view,url); 我为天真而道歉,但我不明白返回 true 或超类方法有什么区别?

 @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            UltimatixTouchWebView webView = (UltimatixTouchWebView) view;

            if (null != url && ((url.endsWith(".js") || url.endsWith(".css")))
                    && (checkResource(url))) {
                return true;
            } else {
                return super.shouldOverrideUrlLoading(view, url);
            }
        }
4

2 回答 2

19

我花了一些时间对所有的场景做了一些排列。这是我发现的——

  1. return false-> 如果你使用这个,你甚至不需要加载 url,即不需要把loadUrl(url). WebView会自动加载url。

  2. return true-> 当前 URL 不会被加载WebView,引用Android 网站

    如果提供了 WebViewClient,则返回 true 表示主机应用程序处理 url

因此,您的应用程序将处理它。IE。您的应用程序必须具有一些功能才能在该 url 上运行。即使您只想将页面加载回您的WebView,您也必须编写webView.loadUrl(URL);。否则它不会加载您的页面。

在此示例中,假设您想从第一页转到 second.html。

public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if(url.contains("second.html")){
                    Toast.makeText(con, "Second Page", Toast.LENGTH_LONG).show();
                    view.loadUrl(url);
                    }
                return true;
}

在这里,如果您单击第二页上的任何链接,它将不会去任何地方。因为在这个函数中你的if条件不满足,它会返回true,所以它会查看应用程序是否实现了某些东西。由于我们没有,所以它只会留在那里。

我试图简化它以帮助新的开发人员。

于 2014-09-26T12:37:06.227 回答
0

如果您返回 true,则意味着您处理了该事件,并且操作系统不会对该事件执行任何操作。
如果调用超级函数,则让操作系统处理事件(在浏览器中打开)。

于 2013-05-22T14:10:36.267 回答