2014-03-28 2 views
1

Я пытаюсь отфильтровать gridview, и для этого я ввожу данные в поле редактирования. Он отлично работает, за исключением того, что когда я вставляю пробел в поле редактирования, он каким-то образом его не распознает, а набор результатов пуст. Пожалуйста, помогите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); 

     } 

}); 

Я не могу понять эту проблему, так как он работает отлично с другими персонажами.

+0

is onTextChanged называется? – Hardik

+0

Да, он был вызван при вводе текста в editbox – Zonera

+0

попробуйте мой ответ, вам нужно сделать фильтр для этого – Hardik

ответ

1

Попробуйте использовать 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() для строки текста.

+0

Благодарим за помощь. Это сработало. Но теперь он не распознает слово после космоса. Как если бы я поставил «Борьба с детским трудом», он признает только боевые действия и пространство после него, но не признает ребенка. – Zonera

+0

попробуйте добавить maxlength к вашему edittext.Its только одно предложение, возможно, не идеальное решение в вашем случае. –

+0

@Zonera Как у вас проблема с ур, указанная в ур-комментарии выше? По максимальной длине? – KOTIOS

0

Переместить код фильтра в 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 

     } 

}); 
+0

По-прежнему он возвращает пустой результат при нажатии пробела – Zonera

+0

Вы можете попытаться получить текст из TextView непосредственно –

+0

Я обновил сообщение –

Смежные вопросы