2011-05-10 62 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

相关问题