2011-05-10 99 views
0

我想顯示一個警報對話框並獲取用戶是否運行AsyncTask的輸入。然而,無論如何,即使我把它放在if語句中,AsyncTask仍然運行。有誰知道爲什麼會發生這種情況?這是我的代碼:我的AsyncTask即使在if語句條件未滿足時也會運行

button.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      Boolean b = false; 

      AlertDialog.Builder alertbox = new AlertDialog.Builder(
        ThisScreen.this); 
      alertbox.setPositiveButton("Yes", 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface arg0, int arg1) { 
          b = true; 
         } 
        }); 
      alertbox.setPositiveButton("No", 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface arg0, int arg1) { 
          b = false; 
         } 
        }); 

      alertbox.setTitle("Title"); 
      alertbox 
        .setMessage("Continue?"); 
      alertbox.show(); 

      if(b) 
       new doAsyncTask().execute; 

    } 
}); 

回答

2

我的任務不知道它是否有所作爲,但合乎邏輯的事情是使用方法setNegativeButton()設置無按鈕。

+0

但是,這樣做的工作,如果有必要,我想提示用戶。例如:如果用戶沒有輸入重要信息,我會顯示警報對話框,並詢問他們是否想要運行asynctask。如果他們確實輸入了所有信息,我不希望AlertDialog彈出。這意味着我需要一個if語句,這意味着回到原點。 (還是)感謝你的建議。 – NotACleverMan 2011-05-10 09:17:58

+0

好吧,看來當我把任務放到if staement的其他部分時,它就會遵循條件。然而,只要把它放在沒有別的部分,它就會不管。這解決了我的問題,但它可能不適用於其他人。謝謝。這是一個奇怪的小錯誤。 – NotACleverMan 2011-05-10 09:28:55

1

你應該將代碼運行內部

alertbox.setPositiveButton("Yes", 
    new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface arg0, int arg1) { 
      runMyDoAsyncTask(); // <-- here 
     } 
    }); 

順便說一句,我不知道,你所提供的代碼將永遠編譯:)

+0

我也試過這個,但我仍然得到相同的結果。你有沒有其他想法? – NotACleverMan 2011-05-10 08:41:42

+0

我拿了工作代碼,並更改了變量名稱。也許我不小心改變了一些東西,但是你認爲什麼是錯的? – NotACleverMan 2011-05-10 08:42:43

+0

@TehGoose你有局部變量'b'這是從內部類訪問,而不是宣佈'最後'這應該會觸發編譯錯誤 – 2011-05-10 08:46:26

相關問題