УЖЕ знаю, что есть много вопросов, задающих одно и то же, но они не работают для меня. Вот код (я использую код, чтобы окрасить часть текста в EditText) -Ошибка Android TextWatcher StackOverflow
et_note.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 (textCC.contains("sample_text")) {
String syntaxText = "sample_text";
int ofe = textCC.indexOf(syntaxText, 0);
int nextOfe = textCC.indexOf(syntaxText, ofe);
for (int ofs = 0; ofs < textCC.length() && ofe != -1 && nextOfe != -1; ofs = nextOfe + 1) {
ofe = textCC.indexOf(syntaxText, ofs);
nextOfe = textCC.indexOf(syntaxText, ofe + 1);
if (ofe == -1 || nextOfe == -1) {
break;
} else {
Spannable WordtoSpan = new SpannableString(et_note.getText());
WordtoSpan.setSpan(new ForegroundColorSpan(0xFF00FF00), ofe, nextOfe + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
et_note.setText(WordtoSpan, TextView.BufferType.SPANNABLE);
}
}
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
Это дает ошибку переполнения стека.
Ответы, которые работают, но не подходят -
1) Добавить et_note.removeTextChangedListener(this)
перед кодом и добавить et_note.addTextChangedListener(this)
после кода - Это один работает, но НЕ правильно, и приложение становится очень медленным.
Любые другие способы, которые помогут мне? Благодарю.
Для одного, не называют 'SetText()' на 'наблюдаемого EditText'. Вместо создания нового 'Spannable', основанного на том, что находится в' EditText', просто используйте 'Spannable', который вы вернетесь из' getText() ', и установите для него свой диапазон. – CommonsWare
@CommonsWare Как мне это сделать? Я имею в виду _use Spannable, что вы возвращаетесь из getText(), и устанавливаете свой диапазон на нем. – FadedCoder
'et_note' выглядит как' EditText'. [Метод 'getText()' в 'EditText' возвращает' Editable'] (http://developer.android.com/reference/android/widget/EditText.html#getText%28%29). ['Editable' является под-интерфейсом' Spannable'] (http://developer.android.com/reference/android/text/Editable.html). ['setSpan()' - это метод, определенный в 'Spannable'] (http://developer.android.com/reference/android/text/Spannable.html#setSpan%28java.lang.Object,%20int,%20int, % 20int% 29). Следовательно, вы можете вызвать 'setSpan()' для объекта, возвращаемого 'et_note.getText()'. – CommonsWare