在安卓系统中,警告对话框不应该自动关闭。

9

我正在开发一个应用程序,其中包含一个警告对话框。

现在我正在检查来自AlertDialog编辑框中的一些数据,并在对话框Positive按钮OnClick方法中检查它们,但如果我从edittext字段中获取的数据是正确的或不正确的,对话框总是会关闭。

我们如何禁用这个功能。

更新:

我从对话框框中获取Pin Code和Confirm Pin Code,在onPositive点击时我已经检查了验证pin codes。

现在,如果pin codes匹配,则调用dialog.dismiss(),如果不匹配,则显示Toast。

但是,在pin code不匹配的情况下,它会显示消息并关闭对话框。

我不希望这种情况发生。

更多更新:

是否有办法禁用OK按钮,当数据验证后再启用positive按钮?

请帮忙。


1
你能否附上一些代码来说明吗?从你的问题中很难理解你想要什么。我猜你想要验证输入数据,是这样吗?你在使用AlertDialog的子类来完成这个任务吗? - Caspar Harmer
请添加设置警报对话框的代码。这样可以更容易地看出问题出在哪里。 - Eric Nordvik
3个回答

27

这是一个技巧(在onShowListener内覆盖onClickListener):

final AlertDialog d = new AlertDialog.Builder(context)
                .setView(v)
                .setTitle(R.string.my_title)
                .setPositiveButton(android.R.string.ok,
                        new Dialog.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface d, int which) {
                                //Do nothing here. We override the onclick
                            }
                        })
                .setNegativeButton(android.R.string.cancel, null)
                .create();

        d.setOnShowListener(new DialogInterface.OnShowListener() {

            @Override
            public void onShow(DialogInterface dialog) {

                Button b = d.getButton(AlertDialog.BUTTON_POSITIVE);
                b.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View view) {
                        // TODO Do something

                        //Dismiss once everything is OK.
                        d.dismiss();
                    }
                });
            }
        });

正是我想要的!唯一的问题是你的应用程序至少应该在Froyo上运行……对我来说这不是问题 =) - Alvaro Luis Bustamante
1
太好了,这是个很棒的解决方案!只需要进行一个小小的更正:不要使用.create()这一行,而是使用final AlertDialog ad = d.create();去存储结果。接下来,您需要定义ad的(而不是d的)setOnShowListener()方法,并且同样使用ad(而不是d)的getButton()方法(这就是为什么变量必须是final的原因)。如果我没有按照这种方式做,我会得到编译错误,因为这些方法属于AlertDialog类,而不是AlertDialog.Builder类。 - Luis Mendo

3

Cap. 感谢您的帮助。通过您的指南,我知道我可以禁用警示对话框按钮。是的!禁用按钮是可能的。

答案是:

我们可以使用以下方法禁用按钮:

  Button pos =  Dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
  pos.setEnabled(true);

我们如何得到 dialog.getButton 函数。 - Vikky
请在 onResume 中使用 getDialog() 方法并将其转换为 AlertDialog。请注意,例如,您可以保留对该对象的引用。示例:this.okButton = ((AlertDialog) getDialog()).getButton(AlertDialog.BUTTON_POSITIVE); - Reinherd

1

如果您想随时关闭对话框,则必须使用自定义对话框而不是警报对话框。

AlertDialog会在按下AlertDialog的取消或确定按钮时总是消失。

有关自定义对话框的更多信息,请点击此处自定义对话框


有没有办法禁用“Positive Button”,并在数据验证后启用它? - Shah
在 alertDialog 中可能不行,但在自定义对话框中一切皆有可能。 - Niranj Patel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接