2011-02-14 144 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);