2011-02-04 76 views
1

我正在使用web视图的进度条。我需要在页面加载之前停止进度条。按下后退按钮但在加载之间不工作。如何在使用后退按钮加载之前关闭进度条?

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.webview); 
     mWebView = (WebView) findViewById(R.id.webview); 
     mWebView.getSettings().setJavaScriptEnabled(true); 
     mWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 
     final AlertDialog alertDialog = new AlertDialog.Builder(this).create(); 

     progressBar =new ProgressDialog(this); 
     progressBar.setCancelable(true); 
     progressBar.show(); 


     mWebView.setWebViewClient(new WebViewClient() { 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       Log.i("TEST", "Processing webview url click..."); 
       view.loadUrl(url); 
       return true; 
      } 

      public void onPageFinished(WebView view, String url) { 
       Log.i("TEST", "Finished loading URL: " +url); 
       if (progressBar.isShowing()) { 
        progressBar.dismiss(); 
       } 
      } 

      public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
       Log.e("TEST", "Error: " + description); 
       Toast.makeText(getApplicationContext(), "Oh no! " + description, Toast.LENGTH_SHORT).show(); 
       alertDialog.setTitle("Error"); 
       alertDialog.setMessage(description); 
       alertDialog.setButton("OK", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         return; 
        } 



       }); 
       alertDialog.show(); 
      } 
     }); 
     mWebView.loadUrl("http://www.google.com"); 
} 

对于后退按钮测试我使用这个

@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { 
      Toast.makeText(getApplicationContext(),"hi", Toast.LENGTH_LONG).show(); 
      return true; 
     } 

     return super.onKeyDown(keyCode, event); 
    } 

回答

3

嗨 请检查了这一点

progressBar = new ProgressDialog(this); 
     progressBar.setCancelable(true); 
     progressBar.setOnCancelListener(new OnCancelListener() { 

      public void onCancel(DialogInterface arg0) { 
       if(progressBar.isShowing()) 
         progressBar.dismiss(); 
       finish(); 
      } 
     }); 
      progressBar.setMessage("Loading..."); 
     progressBar.show(); 

谢谢到每一个

0

使用多线程使用UIWorker线程执行进度和视觉appearence

+0

我已经实现了代码使用AsnyTask和简单的处理程序也有同样的问题,有没有其他的想法?像我如何杀死堆栈中的任何活动? – 2011-02-11 07:40:16

+0

没有必要,只是检查我的答案 – 2011-02-11 10:22:30

1

如果我是你,我会使用AsyncTask来加载URL的数据,并在两者之间显示ProgressDialog。

  • 在启动,酿出过不同的线程,其获取URL的内容
  • 开始显示ProgressDialog
  • 当你有一个线程返回的URL的数据,在web视图
  • 加载
  • 关闭ProgressDialog

对于在不同线程中运行的东西,请检查AsyncTask。

相关问题