【问题标题】:Hide Progress Bar after Webview loaded加载 Webview 后隐藏进度条
【发布时间】:2017-09-05 10:43:09
【问题描述】:

我是安卓工作室的新手。我的问题是 webview 加载完成后进度条没有停止旋转。

我也试过这个-

progressbar.setVisibility(View.VISIBLE); //to show
        progressbar.setVisibility(View.GONE); // to hide

但错误没有解决

我的第一个 Fragment Java 类-

import android.app.AlertDialog;
import android.app.Fragment;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;

import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;


public class firstfragment extends Fragment{

    public WebView mywebview2;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.first_layout, container, false);
        mywebview2 = (WebView) v.findViewById(R.id.WebView);
        mywebview2.loadUrl("https://m.youtube.com");
        mywebview2.setWebViewClient(new WebViewClient());

        // Enable Javascript
        WebSettings webSettings = mywebview2.getSettings();
        webSettings.setJavaScriptEnabled(true);
        AdView mAdView = (AdView) v.findViewById(R.id.adView);
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);
        return v;
    }

    public void onPageFinished(WebView view,String url){
        ProgressBar progressbar = (ProgressBar) view.findViewById(R.id.progressBar2);
        progressbar.setVisibility(View.VISIBLE); //to show
        progressbar.setVisibility(View.GONE); // to hide
    }

}

【问题讨论】:

    标签: javascript java android android-layout progress-bar


    【解决方案1】:

    您不应该在 onPageFinished 内声明这一行 ProgressBar progressbar = (ProgressBar) view.findViewById(R.id.progressBar2); 。您必须在onCreateView 中声明它 你的代码:

    public void onPageFinished(WebView view,String url){
        ProgressBar progressbar = (ProgressBar) view.findViewById(R.id.progressBar2);
        progressbar.setVisibility(View.VISIBLE); //to show
        progressbar.setVisibility(View.GONE); // to hide
    }
    

    在这里,您的view.findViewById(R.id.progressBar2) 指的是您的WebView 视图,与您的进度条无关。

    所以应该是-

    private ProgressBar progressbar;
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
    
        View v = inflater.inflate(R.layout.first_layout, container, false);
        mywebview2 = (WebView) v.findViewById(R.id.WebView);
    
    
        //here
        progressbar = (ProgressBar) v.findViewById(R.id.progressBar2);
        // Enable Javascript
        WebSettings webSettings = mywebview2.getSettings();
        webSettings.setJavaScriptEnabled(true);
        AdView mAdView = (AdView) v.findViewById(R.id.adView);
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);
        myWebView2.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageStarted(WebView view, String url) {
    
            progressbar.setVisibility(View.VISIBLE);
    return true;
        }
    
        @Override
        public void onPageFinished(WebView view, String url) {
    
            progressbar.setVisibility(View.GONE);
    return true;
        }
    });
    mywebview2.loadUrl("https://m.youtube.com");
        return v;
    }
    

    【讨论】:

    • 错误 - 方法不会从其超类覆盖。
    • Error-onPageStarted() 在 WebViewClient 中无法应用。
    • 如果您不知道答案,请不要浪费我和您的时间。错误仍然存​​在。
    【解决方案2】:

    公共类 firstfragment 扩展 Fragment {

        public WebView mywebview2;
        private ProgressBar progressbar;
    
    
        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
    
            View v = inflater.inflate(R.layout.first_layout, container, false);
            mywebview2 = (WebView) v.findViewById(R.id.WebView);
            mywebview2.setWebViewClient(new WebViewClient());
            progressbar = (ProgressBar) view.findViewById(R.id.progressBar2);
    
            // Enable Javascript
            WebSettings webSettings = mywebview2.getSettings();
            webSettings.setJavaScriptEnabled(true);
            mywebview2.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);
                }
            });
            mywebview2.loadUrl("https://m.youtube.com");
            AdView mAdView = (AdView) v.findViewById(R.id.adView);
            AdRequest adRequest = new AdRequest.Builder().build();
            mAdView.loadAd(adRequest);
            return v;
        }
    }
    

    【讨论】:

    • 亲爱的朋友,它不起作用。同样的问题仍然存在。
    【解决方案3】:
    @Override
    public void onPageFinished(WebView view, String url)
    {
       super.onPageFinished(view, url);
       progressBar.setVisibility(view.GONE);
    }
    

    【讨论】:

      【解决方案4】:

      用下面的代码试试这个,你可以根据网页视图中的数据加载和页面加载进度条隐藏后加载进度

          String url = "";
          webView = (WebView) findViewById(R.id.web);
              webView.getSettings().setJavaScriptEnabled(true);
              webView.getSettings().setSupportZoom(true);
              webView.getSettings().setBuiltInZoomControls(true);
              webView.loadUrl(url);
               progressBar = (ProgressBar) findViewById(R.id.progressbar);
      
      
              progressBar.setMax(100);
              progressBar.setProgress(1);
      
      
              webView.setWebChromeClient(new WebChromeClient() {
                  public void onProgressChanged(WebView view, int progress) {
                      progressBar.setProgress(progress);
                  }
              });
       webView.setWebViewClient(new WebViewClient() {
      
                  @Override
                  public void onPageStarted(WebView view, String url, Bitmap favicon) {
                      super.onPageStarted(view, url, favicon);
                      progressBar.setVisibility(View.VISIBLE);
      
      
                  }
      
      
      
                  @Override
                  public boolean shouldOverrideUrlLoading(WebView view, String url) {
                      view.loadUrl(url);
                      return true;
                  }
      
                  @Override
                  public void onPageFinished(WebView view, String url) {
      //                progressDialog.hide();
                      progressBar.setVisibility(View.GONE);
                  }
              });
      
          }
      

      布局文件

       <?xml version="1.0" encoding="utf-8"?>
      <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:app="http://schemas.android.com/apk/res-auto"
          android:id="@+id/activity_web_view"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="vertical">
      
      
          <WebView
              android:id="@+id/web"
              android:layout_width="match_parent"
              android:layout_height="match_parent" />
      
          <ProgressBar
              android:layout_marginTop="-7dp"
              android:id="@+id/progressbar"
              style="?android:attr/progressBarStyleHorizontal"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:layout_alignParentTop="true"
              android:background="@android:color/transparent"
              android:indeterminate="false"
              android:max="100"
              android:progress="1"
              android:theme="@style/ProgressbarTheme" />
      
      </RelativeLayout>
      

      如有任何疑问,请咨询我

      【讨论】:

      • 在哪里添加这个?请建议完整的代码。我是 android studio 的新手。
      • @SunilBisu 将此代码添加到您的 onCreate() 方法中
      • 发现错误 -1。无法解析符号 - tvUrl ,2.无法解析符号 - url ,3.无法解析符号 - tvTitle ,以及 4. 缺少返回语句
      • 为我的情况忽略那一行
      • 错误:(74, 6) 错误: 解析时到达文件末尾
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-16
      • 2012-07-05
      • 2020-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多