0

最近webViewを作成するために、webViewClientを使用していました。mWebView.setWebViewClient(new WebViewClient());

しかし、進行状況バーを実装する必要があります。ユーザーがリンクをクリックすると、このプログレス バーが表示されます。ページが完了すると、プログレスバーが非表示になり、webView が表示されます。thisthisに関しては、 WebChromeClient を追加しました。しかし、最初の URL をロードしますが、Web ページ内のボタンをクリックすると、ダイアログが開き、どのアプリケーションで URL を開くかを尋ねられます。

メソッドをオーバーライドする必要があることを読みましたshouldOverrideUrlLoading()。しかし、「shouldOverrideUrlLoading」をオーバーライドできないというエラーが表示されますWebChromeClient

プログレスバーと webView があり、同じ webView 内で新しい 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);
      }
  }
}
4

3 に答える 3

3
  try with this code 
  webView = (WebView) view.findViewById(R.id.transcationwebview);
            progressdialog = ProgressDialog.show(mContext, "",
                    mContext.getString(R.string.please_wait));
            progressdialog.setCancelable(true);
            progressdialog.setOnCancelListener(new OnCancelListener() {

                @Override
                public void onCancel(DialogInterface dialog) {
                    webView.stopLoading();
                    // webView.clearView();

                }
            });

            webView.getSettings().setJavaScriptEnabled(true);
            webView.setWebChromeClient(new MyChromeClient());
            webView.setWebViewClient(new WebViewClient() {
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    // TODO Auto-generated method stub
                    view.loadUrl(url);
                    return super.shouldOverrideUrlLoading(view, url);
                }

                @Override
                public void onPageFinished(WebView view, String url) {
                    // TODO Auto-generated method stub
                    super.onPageFinished(view, url);
                    if (progressdialog != null && progressdialog.isShowing()) {
                        progressdialog.dismiss();
                    } else {


                    }

                }

                @Override
                public void onPageStarted(WebView view, String url, Bitmap favicon) {
                    // TODO Auto-generated method stub
                    super.onPageStarted(view, url, favicon);
                }

                @Override
                public void onReceivedError(WebView view, int errorCode,
                        String description, String failingUrl) {
                    // TODO Auto-generated method stub

                    super.onReceivedError(view, errorCode, description, failingUrl);

                }
            });

            webView.loadUrl("url");
            webView.getSettings().setBuiltInZoomControls(true);



public class MyChromeClient extends WebChromeClient {
        @Override
        public void onProgressChanged(WebView view, int newProgress) {
            try {

                if (progressdialog.isShowing()) {
                    progressdialog.setMessage(getString(R.string.loading)
                            + newProgress + " %");

                } else {
                    /*
                     * webView.stopLoading(); webView.clearView();
                     */
                }
            } catch (Throwable e) {

                e.printStackTrace();
            }
        }
    }
于 2013-10-25T08:19:54.703 に答える
1

extends WebViewClientの代わりにをWebChromeClientオーバーライドしてonPageStartedを表示しProgressBaronPageReceived

于 2013-10-25T08:15:39.267 に答える
0

アクティビティにいくつかの変更を加えました。

WebChromeClientの代わりにWebViewClientを使用する

また、 ProgressBarの代わりにProgressDialogを使用します

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;
    }
}

これがあなたを助けることを願っています

于 2013-10-25T08:19:27.323 に答える