2012-04-25 216 views
0

嗨,大家看看下面的代碼...我在我的應用程序中使用進度條,但它不顯示當我使用dialog.dismiss()但顯示如果我不使用此方法,但問題然後是它不會消失...... 任何幫助傢伙......?進度條不顯示

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
       builder.setMessage("Are you sure you want to delete?") 
         .setCancelable(false) 
         .setPositiveButton("Yes", 
           new DialogInterface.OnClickListener() { 
            public void onClick(DialogInterface dialog, 
              int id) { 
             `ProgressDialog` dialog1 = ProgressDialog.show(context, "", "Deleting...",true); 
             // Log.v("", "You Clicked " + s); 

             dba.delete("messages", "private = 0 and _id=?", 
               new String[] { s }); 
             dba.close(); 
             populate(); 

            } 
           }) 
         .setNegativeButton("No", 
           new DialogInterface.OnClickListener() { 
            public void onClick(DialogInterface dialog, 
              int id) { 
             dialog.cancel(); 
            } 
           }); 

       AlertDialog alert = builder.create(); 
       alert.show(); 
       dialog1.dismiss(); 
+0

問題是您對dialog1有問題嗎?或者警報有問題? – ootinii 2012-04-25 19:11:58

+0

問題是對話框1的進度對話框... – kashifmehmood 2012-04-26 05:52:36

回答

1

幾件事我會清理:

DialogInterface.OnClickListener clickListener = new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int id) { 
     switch(id){ 
     case DialogInterface.BUTTON_POSITIVE: 

      ProgressDialog waitDialog = ProgressDialog.show(context, "", "Deleting...",true); 
      dba.delete("messages", "private = 0 and _id=?", new String[] { s }) > 0); 
      dba.close(); 

      waitDialog.dismiss(); 

      populate(); 

      break; 
     case DialogInterface.BUTTON_NEGATIVE: 
      dialog.dismiss(); 
      break; 
     } 
} 

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
builder.setMessage("Are you sure you want to delete?") 
     .setCancelable(false) 
     .setPositiveButton("Yes", clickListener) 
     .setNegativeButton("No", clickListener); 

AlertDialog alert = builder.create(); 
alert.show(); 

它的混亂,我爲什麼要稱之爲alert.show()並立即撥打dialog.dismiss(),當dialog將不會顯示,直到您點擊正按鈕在對話框中。

現在,我不記得目前SQLite調用是否被阻塞,通過執行刪除操作,然後關閉對話框後,它應該按照正確的順序完成。我還沒有喝咖啡;)

請記住,雖然SQLite調用通常不會花費太長時間,所以如果從數據庫中刪除一行,ProgressDialog會閃爍並閃爍,如果是這樣的話。如果操作時間超過300毫秒,您可能需要實現一個定時器來顯示進度。

此外,通過創建新的OnClickListener而不是使用匿名內部類,事情變得清晰並變得更加可重用。

此行: dialog.cancel(); 有趣以及您已將對話框設置爲而不是可取消。 dismiss()cancel()之間的區別在於cancel()調用會觸發您尚未設置的OnCancelListener

+0

仍然進度對話框沒有顯示.... – kashifmehmood 2012-04-26 05:51:44

+0

要麼是它沒有顯示由於代碼或操作太快,它顯示。我沒有測試這些塊。 – Phix 2012-04-26 06:49:44

+0

我測試了你的代碼,它工作正常,但沒有顯示進度對話框 – kashifmehmood 2012-04-26 07:36:19