2013-05-07 43 views
7

我在活动中使用showDialogdismissDialog来显示和销毁我的对话框。是否还有一种方法可以在当前显示的对话框上发出点击命令,而不需要保留引用该对话框的变量?如何通过代码点击AlertDialog上的“确定”?

例如,我想通过代码按下对话框中的“确定”/肯定按钮。另外

AlertDialog dialog = ... 
dialog.getButton(DialogInterface.BUTTON_POSITIVE).performClick(); 

,如果你不希望保留到对话框的参考,但:

AlertDialog.Builder alBuilder = new AlertDialog.Builder(this); 
     alBuilder 
       .setMessage("Do you wamt to exit?") 
       .setPositiveButton("Yes", 
         new DialogInterface.OnClickListener() { 

          @Override 
          public void onClick(DialogInterface dialog, 
            int which) { 
           dialog.cancel(); 
           // Write your code here for Yes 
          } 
         }) 
       .setNegativeButton("No", 
         new DialogInterface.OnClickListener() { 

          @Override 
          public void onClick(DialogInterface dialog, 
            int which) { 
           dialog.cancel(); 
           // Write your code here for No 
          } 
         }); 
     alBuilder.setCancelable(false); 
     alBuilder.show(); 
+0

您是否使用生成器来设置对话框? – TronicZomB 2013-05-07 02:54:31

+0

@TronicZomB:是的,我正在使用'Builder',并且我正在重写'Activity'中的'onCreateDialog'来设置我的对话框。 – Arci 2013-05-07 03:05:42

+1

好吧,bakriOnFire在我注意到他的答案之前就已经有了一个很好的例子,我正准备发布。这几乎是你想要的代码模型。 – TronicZomB 2013-05-07 03:07:31

回答

25

我没有测试代码,但它应该工作 - :

+0

谢谢,但我使用的是Builder,它没有'getButton'方法。有没有办法点击'确定'按钮,而没有保持对实际对话框的参考? – Arci 2013-05-07 03:11:44

+2

如果您能够保留对该对话框的引用,则AlertDialog实例由AlertDialog.Builder#show()返回。否则,是否可以将点击式逻辑移至单独的方法?您不必模拟点击,而只需执行点击代码并关闭对话框。 – 2013-05-07 03:16:11

+0

是的,它返回一个'AlertDialog',但我不喜欢保留一个引用'AlertDialog'的变量。如果我有对话的ID,有没有办法使用'Activity'来访问对话框? – Arci 2013-05-07 03:20:39

-1

试试这个在其设置的控制,你可以提取上单击代码到另一种方法:

AlertDialog.Builder builder = ... 
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int which) { 
    onPositiveButtonClicked(); 
    } 
}); 

和实施onPositiveButtonClicked()在您的活动。您可以拨打onPositiveButtonClicked()dismissDialog(id),而不是通过编程方式点击确定按钮。如果需要处理多个对话框,请使用onPositiveButtonClicked作为id参数。

+0

谢谢!但我认为你误解了我的问题。 – Arci 2013-05-07 03:12:53

+0

可以发表你的代码,以便我们可以理解你想要的。 – bakriOnFire 2013-05-07 05:00:24

+0

我在找'activity.getActiveDialog(DIALOG_ID).getButton(...)。performClick()'之类的东西。就像'activity.dismissDialog(DIALOG_ID)'一样,只需使用DIALOG_ID即可解除对话框。 – Arci 2013-05-07 07:17:46

4

我想通过代码

是按“确定” /负对话框的按钮,就可以通过获取POSITIVE按钮实例做出来,然后调用它performClick()。尝试它:

Button okButton = alertDialog.getButton(DialogInterface.BUTTON_POSITIVE); 
okButton.performClick(); //<<< click Button using code 
+0

谢谢!但是如果我没有引用“'变量?有没有办法只用'Activity'来访问'POSITIVE'按钮(类似于'dismissDialog')? – Arci 2013-05-07 03:09:29