Сбой подсчета символов с помощью TextWatcher на HTC longpress

У меня есть 3 элемента EditText, и я хочу перейти от одного поля к другому, если во входных данных есть 4 символа.

Для этого я использую TextWatcher:

getEditView(R.id.edit_code1).addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {}

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

    @Override
    public void afterTextChanged(Editable input) {
        if(input.length() == 4){
            getEditView(R.id.edit_code2).requestFocus();
        }
    }
});

Тип ввода для EditText — "textCapCharacters"

При длительном нажатии на клавишу для получения числа, например, удерживании R для получения 4, большинство устройств не будут добавлять букву, пока пользователь не перестанет удерживать кнопку, и сработает afterTextChanged после выбора буквы 4. На клавиатуре HTC (в данном случае HTC Desire на 2.3.5) такого нет. Несмотря на то, что пользователь все еще держит кнопку, R добавляется к EditText и срабатывает afterTextChanged, а код выполняет свою работу и переводит фокус на следующее поле.

Как можно предотвратить такое нежелательное поведение? Просмотр onKeyDown/Up не поможет, потому что он не регистрирует обычные нажатия клавиш.

5
задан Jurriaanr 8 March 2012 в 15:21
поделиться