TextChangedListener и маска

353
26 ноября 2016, 19:12

Написал форму для проверки региона по номеру телефона Поставил TextWatcher на форму ввода, он отслеживает значение поля ввода и подставляет маску, вот только если я удаляю значение и пытаюсь ввести номер другого региона то подставляется уже другая маска и вылетает ошибка

java.lang.StackOverflowError at android.text.method.ReplacementTransformationMethod$ReplacementCharSequence.getChars(ReplacementTransformationMethod.java:151)

Происходит это как я понял из-за того что я пытаюсь присвоить EditText'у две маски, вопрос, как мне удалять предыдущую маску и заменять на новую?

editPhone.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
        }
        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            if(editPhone.getText().toString().equals("+3")){
                editPhone.addTextChangedListener(new MaskedWatcher("+38 (###) ###-##-##"));
            }
            if(editPhone.getText().toString().equals("+7")){
                editPhone.addTextChangedListener(new MaskedWatcher("+7 (###) ###-##-##"));
            }
            if(editPhone.getText().toString().equals("")){
                editPhone.setText("+");
                editPhone.setSelection(editPhone.getText().length());
            }
            if(editPhone.getText().toString().equals("+1")){
                editPhone.addTextChangedListener(new MaskedWatcher("+1 (###) ###-##-##"));
            }

        }
        @Override
        public void afterTextChanged(Editable editable) {
        }
    });
Answer 1

StackOverflowError у вас из-за того что вы в onTextChanged еще раз задаете TextWatcher для editPhone. Вам нужно логику в MaskedWatcher поправить. Чтобы внутри этого MaskedWatcher была проверка на тип маски. и сделать изначально нужно editPhone.addTextChangedListener(new MaskedWatcher()). Покажите код new MaskedWatcher для подробного ответа

READ ALSO
Как правильно вытянуть Лайки из youtube?

Как правильно вытянуть Лайки из youtube?

Хочу добавить в приложение возможность вытягивать лайки и дизлайки из указанных видеоВернее я это реализовал парсингом страницы, но данное...

273
Возможность докачки файла

Возможность докачки файла

У пользователей слабый интернет, и бывает связь разрываетсяОтправляю файл так

186
Падение приложения

Падение приложения

Приложение крашится если его открыть из свернутого состоянияПричем падение бывает не в каждый раз

199
Конфигурация “dev mode”

Конфигурация “dev mode”

Использую Spring BootПодкажите как "сказать" приложению для запуска в "dev" или "prodaction" mode

186