Я создаю экран, где пользователь может ввести 4-значный пин-код, и для этого я использую несколько виджетов EditText с максимальной длиной 1. Чего я хочу добиться, так это когда EditText уже заполненцифра, пользователь должен иметь возможность заменить эту цифру на другую, просто введя другой ввод.
Я использую TextWatcher для выполнения действий после редактирования текста.У меня была идея установить maxlength равным 2 и очистить EditText в beforeTextChanged.Однако этот метод приводит к тому, что первый ввод очищает поле, а затем пользователь должен снова ввести данные для заполнения поля.
private final TextWatcher textWatcher = new TextWatcher() {
boolean _ignore = false;
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (_ignore) { return; }
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
if (_ignore) { return; }
_ignore = true;
EditText current = (EditText) getActivity().getCurrentFocus();
if (current != null && current.length() > 0) {
current.setText("");
}
_ignore = false;
}
@Override
public void afterTextChanged(Editable s) {
if (_ignore) { return; }
}
};
Аналогичный вопрос был задан здесь ,но все ответы были либо неправильными, либо упускали суть.Это не кажется мне таким неясным случаем, поэтому странно, что я не смог ничего найти в Интернете.Любой вклад будет оценен!