链接应该在Android中的同一Web视图中打开

Mah*_*hek 50 android

我是Android新手,我正在尝试使用此代码在webview中打开链接

WebView myWebView = (WebView) findViewById(R.id.webinfo);
    myWebView.loadUrl("http://oslobokfestival.netteam.no/artical.php?articalid=93");
    myWebView.setBackgroundResource(R.drawable.lbg);
    myWebView.setBackgroundColor(Color.TRANSPARENT);
    myWebView.getSettings().setJavaScriptEnabled(true);
Run Code Online (Sandbox Code Playgroud)

并且在这个HTML页面中包含一些链接,我希望当用户点击该链接时应该在同一个webview中打开,此时它在移动浏览器中打开,请给我适当的解决方案..谢谢.

mom*_*omo 135

您需要将WebViewClient添加到WebView才能在WebView中打开它.就像是

myWebView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        view.loadUrl(request.getUrl().toString());
        return false;
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 不推荐使用`shouldOverrideUrlLoading(WebView视图,String url)`,我们可以使用`shouldOverrideUrlLoading(WebView视图,WebResourceRequest请求)`. (5认同)
  • 文档说你不应该调用 `view.loadUrl(...)` 而只是返回 false:“注意:不要使用请求的 URL 调用 WebView#loadUrl(String) 然后返回 true。这会不必要地取消当前加载并使用相同的 URL 开始新的加载。继续加载给定 URL 的正确方法是简单地返回 false,而不调用 WebView#loadUrl(String)。” (https://developer.android.com/reference/android/webkit/WebViewClient#shouldOverrideUrlLoading(android.webkit.WebView,%20android.webkit.WebResourceRequest)) (3认同)

小智 11

尝试删除@Override并将其放在loadurl之后这对我有用...

myWebView.loadUrl("http://someurl.com");
myWebView.setWebViewClient(new WebViewClient() {
    public boolean shouldOverrideUrlLoading(WebView viewx, String urlx) {
        viewx.loadUrl(urlx);
        return false;
    }
});
Run Code Online (Sandbox Code Playgroud)

  • @Overrideand只是注释,用于告诉您覆盖的方法,您可以(并且应该)将其保留在其中 (2认同)

小智 5

对我来说,它的工作原理是简单地覆盖

shouldOverrideUrlLoading方法和

返回super.shouldOverrideUrlLoading(view, request)

这将处理相同的所有链接WebView

webview.setWebViewClient(new WebViewClient(){
      @Override
      public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
         return super.shouldOverrideUrlLoading(view, request);
      }
});
Run Code Online (Sandbox Code Playgroud)