У меня были проблемы с некоторыми странными поведениями из EditText .setSelection, с которыми я надеюсь, что вы все можете помочь!
В приложении, над которым я работаю, есть поле поиска, и необходимо иметьон ведет себя очень похоже на панель поиска браузера.Например, если пользователь вводит «fo», мы бы хотели, чтобы EditText автоматически заполнял до «foobar» с выделенным автозаполненным «obar» текстом, чтобы его можно было легко заменить пользователем, если автозаполнение не соответствует тому, что предполагал пользовательнабрать.
Для этого у меня есть поле EditText с настройкой TextWatcher, чтобы попытаться автоматически завершить текст afterTextChanged.Вот мой код:
editText.addTextChangedListener(new TextWatcher() {
int lastCount = 0;
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable editable) {
editText.removeTextChangedListener(this);
String searchString = editable.toString();
if (editable.length() > lastCount) {
lastCount = editable.length();
int oldLength = searchString.length();
String autoFillResult = completeAutofill(searchString);
if (!autoFillResult.equals("")) {
searchString = autoFillResult;
editable.clear();
editable.append(autoFillResult);
editText.setSelection(oldLength, autoFillResult.length());
}
} else lastCount = editable.length();
editText.addTextChangedListener(this);
}
});
Моя проблема заключается в следующем.Используя предыдущий случай «Foobar»:
Пользователь вводит «F», EditText автоматически заполняет «oobar» и выделяет его.
Затемпользователь вводит первое «o»
Поле EditText на мгновение очищается (т. е. afterTextChanged получает Editable с пустой строкой)
TheEditText правильно автоматически заполняет введенный пользователем «Fo», за которым следует автозаполненный «obar», который выделен.
Проблема заключается в том, что EditText очищается, а затем снова заполняется, когда пользователь вводит следующий символ, которыйсоздает заметное нарушение в поле EditText.Интересно, что я выделил editText.setSelection (oldLength, autoFillResult.length ());как виновник (т.е. комментирование строки избавляет от проблемы, но, очевидно, это неправильная функциональность).
После завершения некоторых исследований Google и моей собственной отладки, я все еще не уверен, почему это происходит.Эта проблема не встречается слишком часто, так как я не смог найти ее в Google и не смог выяснить причину этой проблемы в своих собственных экспериментах.
Заранее спасибо!