2011-06-16 73 views
1

我的程序中有一個奇怪的錯誤,我只能用一種方法解釋。Alertdialog在點擊後仍然活着

當我點擊菜單屏幕中的某個按鈕時,用戶會得到一個AlertDialog,詢問他如何繼續。 無論他選擇什麼,他都會轉到另一個活動。

事情是,比當用戶退出該活動並因此返回到菜單活動時,對話框似乎仍然打開。事情是,它不會每次都發生。

我沒有在我的代碼中放置一個解僱(),但我確信它是自動完成的。

  AlertDialog alertDialog = new AlertDialog.Builder(YanivMenuActivity.this).create(); 
      alertDialog.setTitle("Active Game"); 
      alertDialog.setMessage("You are in the middle of a game.\nStarting a new game will cancel that one.\nHow do you wish continue?"); 
      alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Start New Game", 
         new DialogInterface.OnClickListener(){ 
         @Override 
         public void onClick(DialogInterface arg0, int arg1) { 
          inGame = false; 
          startActivity(new Intent(YanivMenuActivity.this,YanivGameActivity.class).putExtra("reset", true)); 
         } 
         }); 

      alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "Continue Old Game", 
         new DialogInterface.OnClickListener(){ 
         @Override 
         public void onClick(DialogInterface arg0, int arg1) { 
          startActivity(new Intent(YanivMenuActivity.this,YanivGameActivity.class).putExtra("reset", false)); 
         } 
         }); 
      alertDialog.show(); 
+0

剛纔發生了一些奇怪的事情。該對話框僅在玩家點擊開始按鈕並且存在有效遊戲時才顯示。如果沒有活動的遊戲,則跳過對話框。我剛剛遇到了一個沒有活動的遊戲,所以點擊直接進入遊戲。當遊戲屏幕退出時,它返回到菜單,但顯示對話框 - 幾乎就像它記住點擊!我將不得不看看它是否再次發生。 – theblitz 2011-06-16 12:01:49

回答

3

您幾乎回答了您自己的問題。您需要需要撥打電話startActivity(...);之前致電dismiss()

3

請檢查下面的代碼

AlertDialog alertDialog = new AlertDialog.Builder(YanivMenuActivity.this).create(); 
     alertDialog.setTitle("Active Game"); 
     alertDialog.setMessage("You are in the middle of a game.\nStarting a new game will cancel that one.\nHow do you wish continue?"); 
     alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Start New Game", 
        new DialogInterface.OnClickListener(){ 
        @Override 
        public void onClick(DialogInterface arg0, int arg1) { 
         inGame = false; 
         dismiss(); 
         startActivity(new Intent(YanivMenuActivity.this,YanivGameActivity.class).putExtra("reset", true)); 
        } 
        }); 

     alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "Continue Old Game", 
        new DialogInterface.OnClickListener(){ 
        @Override 
        public void onClick(DialogInterface arg0, int arg1) { 
         dismiss(); 
         startActivity(new Intent(YanivMenuActivity.this,YanivGameActivity.class).putExtra("reset", false)); 
        } 
        }); 
     alertDialog.show(); 
2

調用start活動之前,必須先取消對話框:

public void onClick(DialogInterface arg0, int arg1) { 
alertDialog.cancel(); 
startActivity(new Intent(YanivMenuActivity.this,YanivGameActivity.class).putExtra("reset", false)); 
         } 
+0

取消和解僱有什麼區別? – theblitz 2011-06-16 11:52:15

+0

這裏是我發現的:通常情況下,一個對話框在作業完成並被從屏幕上移除時被解散。當用戶想要退出對話框並按下「後退」按鈕時,對話框將被取消。 例如,屏幕上有一個標準的Yes/No對話框。如果用戶單擊「否」,則對話框將被解除,「否」的值將返回給調用者。如果不是選擇是或否,用戶點擊返回來退出對話框而不是做出選擇,然後對話框被取消,並且沒有值返回給調用者。SO IN UR CASE DISMISS應該B USED.I STANDED CORRECTED – Nitin 2011-06-16 11:57:00

0
alertbox.cancel(); 

這是當你想關閉警告框,你應該做的。請記住用alertbox的名稱替換alertbox。