2012-07-31 76 views
1

我的应用程序有webview,我添加进度对话框显示加载,直到web加载完成。我在谷歌搜索,并得到了很好的解决方案显示带有对话框进度和网络客户端的webview客户端

wv.setWebChromeClient(new MyWebChromeClient()); 
wv.setWebViewClient(new MyWebViewClient()); 
wv.loadUrl("http://www.google.com"); 

    private class MyWebViewClient extends WebViewClient { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) 
     { 
      view.loadUrl(url); 
      return true; 
     } 

     @Override 
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
      alertdialog.setTitle("Error"); 
      alertdialog.setMessage(description); 
      alertdialog.setButton("OK", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       //return; 
       finish(); 
      } 
     }); 
      alertdialog.show(); 
    } 
    } 


    private class MyWebChromeClient extends WebChromeClient { 

     @Override 
     public void onProgressChanged(WebView view, int progress) { 
      progressDialog.show(); 
      progressDialog.setProgress(0); 
      activity.setProgress(progress * 1000); 

      progressDialog.incrementProgressBy(progress); 

      if(progress == 100 && progressDialog.isShowing()) 
       progressDialog.dismiss(); 
     } 

    } 

但我的问题是,如何让progressdialog只出现一次后,我推出来,因为现在如果我点击例如像图像(在google.com),进程对话框将再次出现。

+0

看到这个链接http://stackoverflow.com/questions/8634319/how-to-set-different-title-for-alert-dialog-when-webview-page-is-loaded/9394561#9394561 – Sameer 2012-07-31 04:21:18

+0

我试试你的链接和实现,但这不是我想要的,因为我不想让webview看起来像弹出。 – 2012-07-31 04:49:46

回答

4
this.getWindow().requestFeature(Window.FEATURE_PROGRESS); 
      setContentView(R.layout.info); 

      mProgressDialog = new ProgressDialog(this); 
      mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
      mProgressDialog.setMessage("Please wait..."); 
      mProgressDialog.setCancelable(false); 
      mProgressDialog.setMax(100); 
      mProgressDialog.show(); 

      WebView webView = (WebView) findViewById(R.id.webview); 
      webView.setVisibility(View.VISIBLE); 
      webView.getSettings().setJavaScriptEnabled(true); 

      webView.setWebChromeClient(new WebChromeClient() { 
       public void onProgressChanged(WebView view, final int progress) 
       { 
        activity.setTitle("Loading..."); 
        activity.setProgress(progress * 100); 
        mProgressDialog.setProgress(progress); 




        if(progress == 100) 
        { 
         activity.setTitle(R.string.app_name); 
         mProgressDialog.dismiss(); 
        } 

       } 
      }); 

      webView.setWebViewClient(new WebViewClient() { 
       @Override 
       public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) 
       { 
       } 

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

      webView.loadUrl("http://www.google.com"); 
1

当页面为loading时,请检查以下代码,将显示屏progressbar转换为webview。

protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 

    this.getWindow().requestFeature(Window.FEATURE_PROGRESS); 
    setContentView(R.layout.newsdisplay); 
    getWindow().setFeatureInt(Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON); 


    newswebview = (WebView) findViewById(R.id.news_webView); 
    newswebview.setWebViewClient(new WebViewClient()); 
    WebSettings webSettings = newswebview.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 

    newswebview.getSettings().setSupportZoom(true);  //Zoom Control on web (You don't need this 
    //if ROM supports Multi-Touch  
    newswebview.getSettings().setBuiltInZoomControls(true); //Enable Multitouch if supported by ROM 


    newswebview.loadUrl(url); 


    final Activity MyActivity = this; 

newswebview.setWebChromeClient(new WebChromeClient() { 
    public void onProgressChanged(WebView view, int progress) 
     { 

     //Make the bar disappear after URL is loaded, and changes string to Loading... 
     MyActivity.setTitle(" Loading..."); 
     MyActivity.setProgress(progress * 100); //Make the bar disappear after URL is loaded 

     // Return the app name after finish loading 
      if(progress == 100) 
       MyActivity.setTitle(R.string.app_name); 

    } 
}); 

} 


@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) 
    { 
     if ((keyCode == KeyEvent.KEYCODE_BACK) && newswebview.canGoBack()) { 
      newswebview.goBack(); 
      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 

} 
+0

好吧我会尝试一下,并会给你一个反馈 – 2012-07-31 04:50:26

+0

你的方式使用进度条,但我想使用prograssdialog不进度条 – 2012-07-31 04:54:16

1

//使用进度显示该代码的WebView

​​3210
+0

好吧将尝试它,并会给你一个feedbacl – 2012-07-31 04:51:09

+0

你可以在屏幕上方显示进度条。 – iAndroid 2012-07-31 05:01:20

+0

我不想显示进度条,我只想使用progressdialog,因为那是我的客户想要它@ _ @ – 2012-07-31 05:06:21

1

你可以试试下面的代码

view = (WebView) findViewById(R.id.WebView01); 
    view.setBackgroundColor(0); // set the background transparent 

    progressDialog = ProgressDialog.show(view.getContext(), "Loading...", "Loading..."); 
    progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER ); 

    view.setWebChromeClient(new MyWebChromeClient()); 
    view.getSettings().setJavaScriptEnabled(true); 
    view.setWebViewClient(new MyWebViewClient()); 
    view.loadUrl("http://www.xxx.com/web/apps/jots.do"); 

然后创建类

private class MyWebViewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url)  
    { 
     view.loadUrl(url); 
     return true; 
    } 
} 

private class MyWebChromeClient extends WebChromeClient { 

    @Override 
    public void onProgressChanged(WebView view, int newProgress) { 
     if(progressDialog!=null){ 
      if (newProgress >=80) { 
       progressDialog.dismiss(); 
      } else { 
       progressDialog.setMessage(newProgress + " % loaded"); 
      } 
     } 
     super.onProgressChanged(view, newProgress); 
    } 
} 
+0

好吧我会尝试一下并给你一个反馈 – 2012-07-31 05:15:15