0

我有一个带有几个输入控件元素的对话框片段 A。当用户为某些字段输入无效值时,会弹出一个带有验证错误消息的对话框 B。

问题是当我关闭对话框 B 时,对话框 A 不可见。这对用户不友好——如果对话框有 10 个值并且用户为其中的 9 个输入了正确的值,那么在验证错误的情况下,他/她必须再次重新输入这 9 个正确的值。

A 和 B 都使用AlertDialog.

如何实现验证错误消息的显示,以便用户可以返回对话框 A、更正错误值并再次按下 OK 按钮?

4

1 回答 1

1

这是kludge-y,但我已经设法让它为我工作。你这样做的方式,在警报对话框上显示验证错误(并防止对话框被关闭)是覆盖OnClickListener对话框按钮。您可能会想“我已经在这样做了……谢谢混蛋”,但这就是诀窍。您可能正在打电话AlertDialog.Builder().setTitle().setView().setPositiveButton(title, new OnClickListener() {...validation logic...}).create();然后返回。如果你想防止对话框被关闭,你需要OnShowListener在对话框中添加一个(在它被创建之后)并覆盖按钮 click there。这是一个例子:

不起作用的方式:

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setTitle("Dialog example").setPositiveButton(android.R.string.ok, new Dialog.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            // do some validation logic
            if (!valid) {
                myEditText.setError(R.string.invalid_value); //
            } else {
                dialog.dismiss();
            }
        }
    });

    Dialog dialog = builder.create();
    // show the dialog, or return it, whatever you're going to do with it

所以上面的方法不起作用,因为onClickListener在默认调用之前调用了你的调用,这将关闭对话框。这是解决它的一种方法:

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setTitle("Dialog example").setPositiveButton(android.R.string.ok, null);

    Dialog dialog = builder.create();
dialog.setOnShowListener(new OnShowListener() {

    @Override
    public void onShow(DialogInterface dialog) {
        ((AlertDialog)dialog).getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            // do some validation logic
            if (!valid) {
                myEditText.setError(R.string.invalid_value); //
            } else {
                dialog.dismiss();
            }
        }
    }
});

请记住,您有责任解雇它!

于 2013-09-05T13:23:34.880 回答