Textwatcher не распознает пространство
Я пытаюсь отфильтровать сетку, и для этого я ввожу данные в поле ввода. Он прекрасно работает, за исключением того, что когда я вставляю пробел в поле ввода, он как-то не распознает его, и набор результатов становится пустым. Пожалуйста помоги
Вот мой слушатель editbox:
search.addTextChangedListener(new TextWatcher(){
@Override
public void afterTextChanged(Editable arg0) {}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {}
@Override
public void onTextChanged(CharSequence cs, int start, int before, int count) {
MainActivity.this.adapter.getFilter().filter(cs);
}
});
Я не могу понять проблему, так как она отлично работает с другими персонажами.
2 ответа
Решение
Попробуйте использовать trim()
, Надеюсь, это сработает для вас. Я знаю, что вам нужно будет изменить этот код. Но он может дать вам некоторое представление.
search.addTextChangedListener(new TextWatcher(){
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
MainActivity.this.adapter.getFilter().filter(search.getText().toString().trim());
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence cs, int start, int before,
int count) {
// TODO Auto-generated method stub
}
});
Если это не работает, попробуйте второй вариант
search.addTextChangedListener(new TextWatcher(){
@Override
public void afterTextChanged(Editable arg0) {
String result = s.toString().replaceAll(" ", "");
if (!s.toString().equals(result)) {
ed.setText(result);
ed.setSelection(result.length());
// alert the user
}
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence cs, int start, int before,
int count) {
}
});
Я предпочитаю первый вариант использования trim()
в строку текста.
Я смог решить эту проблему с помощью следующего кода:
@Override
public void afterTextChanged(Editable editable) {
String keywords = editable.toString();
if (keywords.length() > 0){
String ultimo = keywords.substring(keywords.length() - 1);
if (ultimo.equals(" ")){
youtubeSearchView.setText(editable.toString() + "\b");
youtubeSearchView.setSelection(keywords.length());
}
}
Переместите код фильтра в afterTextChanged()
метод.
Например:
search.addTextChangedListener(new TextWatcher(){
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
MainActivity.this.adapter.getFilter().filter(search.getText().toString());
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence cs, int start, int before,
int count) {
// TODO Auto-generated method stub
}
});