Android EditText 在验证后更改焦点并在对话框中显示错误

问题描述 投票:0回答:1

我有一个带有 3 个 EditText 字段的简单活动。

用户、通行证、确认

在“用户”字段中输入内容并单击键盘上的“下一步”后,我有一个 setOnFocusChangeListener 来验证输入。 如果验证失败,将打开一个对话框,其中包含一条消息和一个“确定”按钮。

对话框关闭后,我尝试以多种方式在我的用户编辑文本上请求焦点,通过在通过时释放它,通过尝试再次在用户上释放,通过请求而不是清除并再次请求,但当我单击另一个字段时,软键盘将不会不要再次打开,否则我最终会看到两个带有闪烁光标的 EditText 字段。

有什么想法吗?

android android-edittext focus android-cursor
1个回答
3
投票

我建议使用 TextWatcher 验证用户的输入:

EditText textbox = new EditText(context);
textbox.addTextChangedListener(new TextWatcher() {
            @Override
            public void afterTextChanged(Editable s) {
                // Your validation code goes here
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }
        });

仅在 afterTextChanged 方法中处理验证,不要触及其他两个,如 文档 中建议的那样。然而,每次输入更改时都会触发 afterTextChanged get ,因此如果用户输入单词“hello”,则在输入 h 时调用此方法,然后在输入 e 时再次调用,依此类推...此外,如果修改 edittext 值在 afterTextChanged 中, get 方法也被调用。

另一种方法是在 EditText 失去焦点时验证用户输入。为此,您可以使用:

    textbox.setOnFocusChangeListener(new OnFocusChangeListener() {

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            // Your validation code goes here
        }
    });

但是请注意,某些小部件可能无法抓住焦点,因此您的 Edittext 永远不会丢失焦点(例如使用按钮)。

此外,EditText 还提供了 setError 方法,该方法用红色错误标记标记 edittext,并向用户显示传递给 setError 的文本(该文本可以由您在调用 setError("Your error message") 时设置)。

© www.soinside.com 2019 - 2024. All rights reserved.