Подсчет голосов в EditText Changed Listener

В моем проекте у меня есть EditText . Я хочу подсчитать символы в EditText и показать это число в TextView . Я написал следующий код, и он отлично работает. Тем не менее, моя проблема в том, что когда я нажимаю Backspace, он подсчитывает, но мне нужно уменьшить число. Как я могу рассмотреть Backspace ?

 tv = (TextView)findViewById(R.id.charCounts); textMessage = (EditText)findViewById(R.id.textMessage); textMessage.addTextChangedListener(new TextWatcher(){ public void afterTextChanged(Editable s) { i++; tv.setText(String.valueOf(i) + " / " + String.valueOf(charCounts)); } public void beforeTextChanged(CharSequence s, int start, int count, int after){} public void onTextChanged(CharSequence s, int start, int before, int count){} }); 

Solutions Collecting From Web of "Подсчет голосов в EditText Changed Listener"

использование

 s.length() 

В одном из ответов было предложено следующее, но его очень неэффективное

 textMessage.getText().toString().length() 

Как насчет того, чтобы просто получить длину символа в вашем EditText и отобразить его?

Что-то вдоль линии

 tv.setText(s.length() + " / " + String.valueOf(charCounts)); 

Небольшое количество изменений в вашем коде:

 TextView tv = (TextView)findViewById(R.id.charCounts); textMessage = (EditText)findViewById(R.id.textMessage); textMessage.addTextChangedListener(new TextWatcher(){ public void afterTextChanged(Editable s) { tv.setText(String.valueOf(s.toString().length())); } public void beforeTextChanged(CharSequence s, int start, int count, int after){} public void onTextChanged(CharSequence s, int start, int before, int count){} }); 

Это немного более общий ответ с дополнительными пояснениями для будущих зрителей.

Добавить текст, измененный прослушиватель

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

 EditText editText = (EditText) findViewById(R.id.testEditText); editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) { } @Override public void onTextChanged(CharSequence charSequence, int start, int before, int count) { } @Override public void afterTextChanged(Editable editable) { } }); 

Слушателю нужен TextWatcher , который требует переопределения трех методов: beforeTextChanged , onTextChanged и afterTextChanged .

Подсчет символов

Вы можете получить количество символов в onTextChanged или beforeTextChanged с помощью

 charSequence.length() 

Или в afterTextChanged с

 editable.length() 

Значение методов

Параметры немного запутывают, поэтому вот немного лишнее объяснение.

beforeTextChanged

beforeTextChanged(CharSequence charSequence, int start, int count, int after)

  • charSequence : это текстовое содержимое до charSequence ожидающего изменения. Вы не должны пытаться изменить его.
  • start : Это индекс, в который будет вставлен новый текст. Если выбран диапазон, то это начальный индекс диапазона.
  • count : Это длина выделенного текста, который будет заменен. Если ничего не выбрано, тогда count будет равен 0 .
  • after : это длина текста, который нужно вставить.

OnTextChanged

onTextChanged(CharSequence charSequence, int start, int before, int count)

  • charSequence : это текстовое содержимое после charSequence изменений. Вы не должны пытаться изменить это значение здесь. Измените editable в afterTextChanged если вам нужно.
  • start : Это индекс начала ввода нового текста.
  • before : Это старое значение. Это длина ранее выбранного текста, который был заменен. Это то же значение, что и count beforeTextChanged .
  • count : Это длина текста, который был вставлен. Это то же значение, что и в beforeTextChanged .

afterTextChanged

afterTextChanged(Editable editable)

Подобно onTextChanged , это вызывается после того, как изменение уже выполнено. Однако теперь текст может быть изменен.

  • editable : Это редактируемый текст EditText . Если вы его измените, вы должны быть осторожны, чтобы не попасть в бесконечный цикл. Дополнительную информацию см. В документации .