【问题标题】:How to click 'OK' on an AlertDialog via code?如何通过代码在 AlertDialog 上单击“确定”?
【发布时间】:2013-05-07 02:53:53
【问题描述】:

我在活动中使用showDialogdismissDialog 来显示和销毁我的对话框。还有一种方法可以在当前显示的对话框上发出单击命令,而不保留引用该对话框的变量?

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

【问题讨论】:

  • 您是否使用构建器来设置对话框?
  • @TronicZomB:是的,我正在使用Builder,并且我在Activity 中覆盖onCreateDialog 来设置我的对话框。
  • 好的,bakriOnFire 有一个很好的例子说明我在注意到他的回答之前实际上要发布的内容。这几乎就是您想要对代码建模的内容。
  • @TronicZomB:我认为他误解了我的问题。我知道如何设置对话框以及如何显示和关闭它。考虑到我没有对对话框变量的引用,我的问题是如何通过代码触发点击事件。
  • 嗯......好吧,我想我可能会关注你......祝你好运!

标签: android dialog android-alertdialog


【解决方案1】:

我没有测试过这段代码,但它应该可以工作:

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

或者,如果您不想保留对对话框的引用但可以控制其设置,则可以将点击代码提取到另一个方法中:

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

并在您的活动中实现onPositiveButtonClicked()。您可以调用onPositiveButtonClicked()dismissDialog(id),而不是以编程方式单击确定按钮。如果您需要处理多个对话框,请让onPositiveButtonClicked 采用id 参数。

【讨论】:

  • 谢谢,但我使用的是 Builder,它没有 getButton 方法。有没有办法在不保留实际对话框的引用的情况下单击“确定”按钮?
  • 如果您能够保留对对话框的引用,AlertDialog 实例将由 AlertDialog.Builder#show() 返回。否则,是否可以将点击逻辑移至单独的方法?您可以执行点击代码并关闭对话框,而不是模拟点击。
  • 是的,它返回一个AlertDialog,但我不喜欢保留一个引用AlertDialog 的变量。鉴于我有对话框的 ID,有没有办法使用 Activity 访问对话框?
  • 我明白你的问题,但我不知道该怎么做。 API 似乎并不容易。如果不考虑点击逻辑并关闭对话框,则保留对对话框的引用可能是最简洁的方法。如果您找到了一个不错的方法,请发布。我很想知道:)
  • 我无法找到一种简单的方法来访问 Activity 上当前显示的对话框。我最终使用您的解决方案来保存AlertDialog 的引用并使用dialog.getButton(DialogInterface.BUTTON_POSITIVE).performClick() 触发肯定按钮。谢谢!
【解决方案2】:

我想通过代码按下对话框的“确定”/肯定按钮

是的,您可以通过获取POSITIVE BUTTON 的实例然后调用performClick() 来实现。试试看:

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

【讨论】:

  • 谢谢!但是,如果我没有引用“变量”怎么办?有没有办法只使用Activity 来访问POSITIVE 按钮(类似于dismissDialog)?
【解决方案3】:

如果您使用的是 Builder,它没有 getButton() 函数。你可以试试这个

AlertDialog.Builder alBuilder = new AlertDialog.Builder(this);
alBuilder.setMessage("Test Message")
         .setPositiveButton("Yes", null)
         .setNegativeButton("No",null)
alBuilder.setCancelable(false);
AlertDialog alertDialog = alBuilder.show();

然后你可以通过下面的代码访问按钮

alertDialog.getButton(DialogInterface.BUTTON_POSITIVE).performClick();

【讨论】:

    【解决方案4】:

    试试这个:-

    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();
    

    【讨论】:

    • 谢谢!但我认为你误解了我的问题。
    • 我正在寻找类似activity.getActiveDialog(DIALOG_ID).getButton(...).performClick() 的东西。就像activity.dismissDialog(DIALOG_ID) 一样,您只需使用 DIALOG_ID 即可关闭对话框。
    猜你喜欢
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多