【问题标题】:The progress bar above the Android webview does not stopAndroid webview上方的进度条没有停止
【发布时间】:2021-03-25 08:28:54
【问题描述】:

进度条不会停止,会无限加载。

Referred Page: progress bar in android webview

片段代码

public class testFragment extends Fragment {

    private WebView mWebView;
    private WebSettings mWebSettings;
    private ProgressBar progressBar;

    public testFragment() {
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @SuppressLint("SetJavaScriptEnabled")
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.testfragment, container, false);

        mWebView = (WebView) v.findViewById(R.id.webView);
        progressBar = (ProgressBar) v.findViewById(R.id.pro);
//progressBar.setVisibility(View.GONE);

        mWebView.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                progressBar.setVisibility(View.VISIBLE);
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                progressBar.setVisibility(View.GONE);
            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });

        mWebView.setWebViewClient(new WebViewClient());
        mWebSettings = mWebView.getSettings();
        mWebSettings.setJavaScriptEnabled(true);
        mWebSettings.setSupportMultipleWindows(false);
        mWebSettings.setJavaScriptCanOpenWindowsAutomatically(false);
        mWebSettings.setLoadWithOverviewMode(true);
        mWebSettings.setUseWideViewPort(true);
        mWebSettings.setSupportZoom(false);
        mWebSettings.setBuiltInZoomControls(true);
        mWebSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
        mWebSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
        mWebSettings.setDomStorageEnabled(true);
        mWebView.loadUrl("https://stackoverflow.com/");

        return v;
    }
}

从注解中移除注解将完全消失进度条。

我也想在引用的页面上使用@Override public void onProgressChanged (WebView view, int newProgress),但它没有出现在可用的方法中。

【问题讨论】:

  • 您正在设置 2 个网络客户端。您可以尝试删除 mWebView.setWebViewClient(new WebViewClient());
  • 所以问题是,您设置了 2 个 Web 客户端。最后一个语句覆盖了第一个语句。所以可见和隐藏从未被执行。因为在 UI 中,您已将进度条的可见性设置为可见。因此它始终可见。并且代码永远不会到达。

标签: android webview progress-bar


【解决方案1】:

问题是, 您已设置 2 web clients 并且最后一个语句覆盖了第一个语句。如此可见和隐藏从未被执行。

由于在 UI 中,您已将进度条的可见性设置为可见。因此它始终可见。

删除mWebView.setWebViewClient(new WebViewClient()); 行。

对于onProgressChanged()

你必须使用WebChromeClient。因为在 Chrome 客户端中可用,而不是在 WebViewClient

mWebView.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                super.onProgressChanged(view, newProgress);
            }
        });

【讨论】:

  • 谢谢。我想我在基本代码中犯了一个错误。已经解决了。
猜你喜欢
  • 2018-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-26
  • 1970-01-01
相关资源
最近更新 更多