Индикатор выполнения Android внутри WebView

Недавно для создания webView я использовал webViewClient. mWebView.setWebViewClient(new WebViewClient());

Но мне нужно реализовать индикатор выполнения. Когда пользователь щелкнет ссылку, этот индикатор выполнения будет виден. После завершения страницы индикатор выполнения будет скрыт, а веб-просмотр будет виден. Что касается этого и это, поэтому я добавил WebChromeClient. Но он загружает первый URL-адрес, но когда я нажимаю кнопку на своей веб-странице, открывается диалоговое окно и предлагается открыть URL-адрес, с помощью которого приложение.

Я читал, что должен переопределить метод shouldOverrideUrlLoading(). но я получаю сообщение об ошибке, что «shouldOverrideUrlLoading» не может быть переопределен для WebChromeClient.

Я был бы рад, если бы вы могли привести пример, в котором есть индикатор выполнения и веб-представление, а также открываются новые URL-адреса внутри того же веб-представления.

public class WebActivity extends Activity {
    WebView mWebView;
    ProgressBar mProgress;
    Context mContext;
    ProgressBar mProgressBar;

   @Override
   public void onCreate(Bundle savedInstanceState) {
      this.mContext = getApplicationContext();

      super.onCreate(savedInstanceState);
      setContentView(R.layout.web);

      mWebView = (WebView) findViewById(R.id.webview);

      mWebView.setWebChromeClient(new myWebChromeClient());
      mWebView.getSettings().setJavaScriptEnabled(true);
      mWebView.getSettings().setUserAgentString("myApp");

      mProgressBar = (ProgressBar) findViewById(R.id.webProgressBar);
      mProgressBar.setMax(100);
  }

  public class myWebChromeClient extends WebChromeClient {
      @Override
      public boolean shouldOverrideUrlLoading(WebView view, String url) {
          view.loadUrl(url);
          return false;
      }
      @Override
      public void onProgressChanged(WebView view, int newProgress) {
          //WebActivity.this.setValue(newProgress);
          super.onProgressChanged(view, newProgress);
      }
  }
}

person trante    schedule 25.10.2013    source источник


Ответы (3)


вы можете extends WebViewClient вместо WebChromeClient и переопределить onPageStarted, чтобы показать ProgressBar и закрыть его в onPageReceived

person Blackbelt    schedule 25.10.2013

Я внес некоторые изменения в Activity.

используйте WebViewClient вместо WebChromeClient

а также используйте ProgressDialog вместо ProgressBar

public class WebActivity extends Activity {
    WebView mWebView;
    Context mContext;
    ProgressDialog mProgressBar;
    private static final int DIALOG2_KEY = 1;

   @Override
   public void onCreate(Bundle savedInstanceState) {
      this.mContext = getApplicationContext();
      super.onCreate(savedInstanceState);
      setContentView(R.layout.web);
      mWebView = (WebView) findViewById(R.id.webview);
      mWebView.setWebViewClient(new MyWebChromeClient());
      mWebView.getSettings().setBuiltInZoomControls(true);
      showDialog(DIALOG2_KEY);  }

    @Override
        protected void onResume() {
            super.onResume();
            mWebView.loadUrl("YOUR_URL");
              }

   private final class MyWebChromeClient extends WebViewClient {
        @Override
        public void onPageFinished(WebView view, String url) {
            dismissDialog(DIALOG2_KEY);
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url.startsWith("file")) {
                return false;
            } else{
                view.loadUrl(url);
                return true;
            }
        }
    }

   @Override
    protected Dialog onCreateDialog(int id) {
        switch (id)
        {
        case DIALOG2_KEY:
        {
            mProgressBar.setMessage("Loading");
            mProgressBar.setIndeterminate(true);
            mProgressBar.setCancelable(false);
            return mProgressBar;
        }
        }
        return null;
    }
}

Надеюсь, это поможет вам

person Amit Gupta    schedule 25.10.2013

person    schedule
comment
Расширение как WebChromeClient, так и WebViewClient — отличная идея. Таким образом, я могу показать как процент выполнения, так и скрыть индикатор выполнения onPageFinished. Спасибо. - person trante; 26.10.2013