2011-02-14 119 views
1

我使用进度对话框,第一次当我加载Web视图和OnCreate中安卓对话框问题

创建对象
  progressBar = new ProgressDialog(this); 
    progressBar.setCancelable(true); 
    progressBar.setMessage("Loading..."); 
    progressBar.setOnCancelListener(new OnCancelListener() { 

     public void onCancel(DialogInterface arg0) { 

      if (progressBar.isShowing()) 
       progressBar.dismiss(); 
      finish(); 
     } 
    }); 
    progressBar.show(); 

,并驳回onPageFinished

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

然后我打开另一然后我在onPageStarted中写入代码

    @Override 
      public void onPageStarted(WebView view, String url, Bitmap favicon) { 
       if(progressBar.isShowing()){} 

       else 
       //progressBar. 
       progressBar.show(); 
       super.onPageStarted(view, url, favicon); 
      } 

第二次对话框中的圆圈没有运行,所有的一切正常。 你可以在ApiDemos中看到同样的问题。 请安装在设备Apidemos应用程序然后去查看 - >进步酒吧,>对话框 - >点击“显示Intermediat” 然后解雇使用回button.Now添加点击同一按钮,圆动画将工作

谢谢提前。

+0

您是否尝试过把调用基类(super.onPageStarted)在调用之前显示进度条? – Rich 2011-02-14 13:56:15

回答

0

这是与活动有关的问题,因为当我们关闭对话框活动时,将它的值存储下来,所以第二次调用它加载相同的对话状态,因此需要实现onPrepareDialog来重置新值并使用removeDialog(int)在演出之前。请看看这里

@Override 
    protected void onPrepareDialog(int id, Dialog dialog) { 

     switch (id) { 
     case DIALOG_WEBVIEW: 
      progressBar.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
      progressBar.setMessage("Loading..."); 
      progressBar.setCancelable(true); 
      //mProgressDialog.show(); 
      return; 
     default: 
      return ; 
     } 
     //super.onPrepareDialog(id, dialog); 
    } 

的onCreateDialog

protected Dialog onCreateDialog(int id) { 
     switch (id) { 
      case DIALOG_WEBVIEW: 
       progressBar = new ProgressDialog(this); 
       progressBar.show(); 
       return progressBar; 
      default: 
       return null; 
     } 
    } 

最后ProgressBar does not reset to "0" when opening the second time

代码显示,解雇和删除这样

      removeDialog(DIALOG); 
       showDialog(DIALOG); 
          dismissDialog(DIALOG);