2013-10-25 2 views
0

Чтобы создать webView недавно, я использовал webViewClient. mWebView.setWebViewClient(new WebViewClient());Android progressbar внутри WebView

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

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

Я был бы рад, если бы вы могли привести пример, который имеет progressbar и 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); 
     } 
    } 
} 

ответ

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(); 
      } 
     } 
    } 
+0

Продления и WebChromeClient, и WebViewClient - отличная идея. Таким образом, я могу показать как процент прогресса, так и скрыть прогресс на страницеPageFinished. Благодарю. – trante

1

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

0

Я сделал некоторые изменения в деятельности.

использование 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; 
    } 
} 

Надеется, что это поможет вам

Смежные вопросы