Как отменить изменение текста EditText после отображения сообщения? - PullRequest
0 голосов
/ 15 мая 2018

Я могу отключить EditText, но тогда пользователь просто не сможет изменить текст. Поведение, которое я пытаюсь реализовать, заключается в том, что, если пользователь пытается что-то напечатать (или любой другой изменяющийся метод, такой как вставка), отображается сообщение типа «Вы не можете редактировать этот текст из-за чего-то».

Сначала я думал, что смогу показать сообщение, используя TextWatcher, но, похоже, нет способа отменить изменение. Как я могу добиться того поведения, которое ищу? Единственный способ, которым я мог думать, - это следующий действительно грязный способ.

Иметь резервную копию текста EditText. Когда EditText изменяется, если isReverting равно false, показать сообщение и установить для isReverting значение правда. Если isReverting истинно, просто установите его в ложь. Установите резервную копию к EditText.

Ответы [ 4 ]

0 голосов
/ 15 мая 2018

A TextWatcher удовлетворит потребность в вашем случае. Сделайте проверку внутри afterTextChange(). Ниже приведен пример.

et_Name.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
        }
        @Override
        public void afterTextChanged(Editable s) {
            String input=s.toString();
            if(s.length()>4){
                Toast.makeText(MainActivity.this, "You can only input 4 letters",
                        Toast.LENGTH_SHORT).show();
                String old=input.substring(0,4);
                et_Name.setText(old);
                et_Name.setSelection(old.length());
            }
        }
    });
0 голосов
/ 15 мая 2018

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

0 голосов
/ 15 мая 2018

Вы можете сделать EditText недоступным для редактирования, используя следующее свойство программно

editText.setEnabled(false);

без необходимости textChangeListner

0 голосов
/ 15 мая 2018
<EditText
        android:id="@+id/amount"
        android:inputType="number"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:editable="false"
        android:layout_marginLeft="4dp"
        android:layout_marginRight="4dp"
        android:layout_marginBottom="4dp" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...