用户友好地显示Android对话框中的验证错误

时间:2013-05-03 09:02:46

标签: android user-interface usability

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

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

A和B都是使用AlertDialog实现的。

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

1 个答案:

答案 0 :(得分:1)

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

不起作用的方式:

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

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