Замените текст в EditText из maxLength 1 при вводе нового текста - PullRequest
0 голосов
/ 02 октября 2018

Я создаю экран, где пользователь может ввести 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; }
    }
};

Аналогичный вопрос был задан здесь ,но все ответы были либо неправильными, либо упускали суть.Это не кажется мне таким неясным случаем, поэтому странно, что я не смог ничего найти в Интернете.Любой вклад будет оценен!

1 Ответ

0 голосов
/ 02 октября 2018

Вы шли хорошо!Установите maxLenght равным 2, и, если текст изменен, проверьте размер ввода.Если это 2, очистите первую цифру.Таким образом, вы не очистите его, когда пользователь вводит цифру в первый раз.

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
    if (s.length() >= 2) {
        editText.setText(s.toString().substring(s.length() - 1, s.length()));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...