У меня есть 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 не поможет, потому что он не регистрирует обычные нажатия клавиш.