Android EditText меняет фокус после проверки и показывает ошибку в диалоге - PullRequest
2 голосов
/ 28 февраля 2011

У меня есть простое действие с 3 полями EditText.

Пользователь, Пропуск, Подтверждение

После ввода чего-либо в поле «Пользователь» и нажатия следующей клавиши на клавиатуре у меня есть setOnFocusChangeListenerтам, что будет проверять ввод.Если проверка не пройдена, открывается диалог с сообщением и кнопкой ОК.

После того, как диалог закрылся, я попытался во многих вариациях requestFocus для моего пользовательского EditText, выпустив его на Pass, попытавшись снова на User, запросив затем очистку и запрос снова, но когда я нажимаю на другойполе softkeyboard больше не открывается, или я получаю два поля EditText с мигающим курсором.

Есть идеи?

1 Ответ

2 голосов
/ 28 декабря 2011

Я предлагаю проверить ввод пользователя с помощью 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", этот метод get вызывается при вводе 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 , который помечает текст редактирования красной меткой ошибки и показывает текст, переданный пользователю setError (текст может быть установлен вами при вызове setError ( сообщение об ошибке")).

...