2014-11-21 68 views
1

我有一个webview,webview可能包含具有两种不同类型链接的网页。我想要的是,如果用户点击包含http://webpagename.com的链接,它应该打开手机浏览器中的链接。如果用户点击没有http://的第二种链接,他应该被重定向到一个新的活动。目前发生的事情是,与http://的链接在网页浏览和浏览器中都是开放的。但是,没有http://的链接显示为网页不可用Webview尝试打开所有链接,但应该在浏览器中打开

来处理网页视图的onclick链接代码:

// to know which link is clicked 
      holder.webView.setWebViewClient(new WebViewClient() { 
       @Override 
       public boolean shouldOverrideUrlLoading(WebView view, String url){ 
        holder.webView.setWebViewClient(new WebViewClient() { 
         @Override 
         public WebResourceResponse shouldInterceptRequest (final WebView view, String url) { 
          if (url != null && url.startsWith("http://")) { 
           view.getContext().startActivity(
            new Intent(Intent.ACTION_VIEW, Uri.parse(url))); 
           return null; 
          } 
          else { 
          Log.e("URL: ", url); 
          System.out.println(url.replace(url.substring(0,url.lastIndexOf("/")+1), "")); 
          return null; 
          } 
         } 

         /** 
         * Return WebResourceResponse with CSS markup from a String. 
         */ 

        }); 

        return super.shouldOverrideUrlLoading(view, url); 
       } 
      }); 

我应该怎么做,以确保http://链接总是在浏览器中打开,另一个链接打开活动,但没有在网页视图中打开?

回答

1

docs for WebViewClient,该shouldOverrideUrlLoading()方法:

返回

如果主机应用程序要离开当前的WebView和处理URL本身True,否则返回false。

既然你处理的WebView内容和重定向的活动,这种方法应该明确地返回true,而不是super方法的返回值。

从您的描述和代码看,您似乎不需要重写shouldInterceptRequest()方法。

holder.webView.setWebViewClient(new WebViewClient() { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) 
     { 
      if (url != null && url.startsWith("http://")) 
      { 
       view.getContext().startActivity(
        new Intent(Intent.ACTION_VIEW, Uri.parse(url))); 
      } 
      else 
      { 
       Log.e("URL: ", url); 
       System.out.println(url.replace(url.substring(0, url.lastIndexOf("/") + 1), "")); 
       // Start your app's Activity here 
      } 

      return true; 
     } 
    }); 
+0

我改变了返回值super.shouldOverrideUrlLoading(view,url);返回真实;但它是一样的。没有帮助我 – kittu88 2014-11-21 08:14:28

+0

是的,我只是仔细看看你的代码。这有点不吉利。您不应该在'shouldOverrideUrlLoading()'方法内设置另一个'WebViewClient'。在一个客户端覆盖你需要的两种方法,并设置一次。 – 2014-11-21 08:19:27

+0

如果部分工作很酷,但其他部分不是 – kittu88 2014-11-21 09:16:34

相关问题