2013-03-13 3 views
0

У меня есть фильтр адаптеров listview, который правильно фильтрует мой введенный текст с использованием аналогичного оператора.Невозможно отобразить данные списка после фильтра

Проблема, с которой я сталкиваюсь, заключается в том, что когда приложение загружается, все данные отображаются в списке. Когда фильтр применяется, он правильно фильтрует текст supplid, то, что я не могу сделать, так это, чтобы после того, как edittext снова пуст (т.е. строка поиска удалена), все данные перерисовываются в списке.

Следующие скриншоты отображения вопрос:

Загруженный список:

enter image description here

Фильтр текста 'а'. Apple, отображается как ожидалось:

enter image description here

Проблема: Когда 'а' удаляется, ListView не перезагружается.

enter image description here

Код для фильтра: метод

 itemNameEdit = (EditText) findViewById(R.id.inputName); 

    showItems.setTextFilterEnabled(true); 

    itemNameEdit.addTextChangedListener(new TextWatcher() 
    { 


     @Override 
     public void afterTextChanged(Editable s) { 

     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, 
       int count) { 

      cursorAdapter.getFilter().filter(s.toString()); 

     } 


    }); 


    getCons = new DBHandlerShop (this, null, null); 

    cursorAdapter.setFilterQueryProvider(new FilterQueryProvider() 
    { 
     public Cursor runQuery(CharSequence constraint) 
     { 

      getCons.open(); 
      return getCons.getChanges(constraint.toString()); 


     } 

    }); 
    showItems.setAdapter(cursorAdapter); 

GetChanges:

public Cursor getChanges(String constraintPassed) { 

     String [] columns = new String[]{KEY_ROWSHOPID, KEY_ITEMSHOP, KEY_ITEMNUM, KEY_ITEMPRICE}; 
     Cursor c = null; 
     if(constraintPassed == "" || constraintPassed.length() == 0) 
     { 
      c = ourDatabase.query(DATABASE_TABLESHOP, columns, null, null, null, KEY_ITEMSHOP + " ASC", null); 


     } 

     else 
     { 

      c = ourDatabase.query(DATABASE_TABLESHOP, columns, KEY_ITEMSHOP + " LIKE'" + constraintPassed + "%'", null, null, null, KEY_ITEMSHOP + " ASC", null); 

     } 

     if(c != null) 
      { 
       c.moveToFirst(); 
       //return c; 

      } 
     return c; 
    } 
+0

добавить cursorAdapter.notifyDataSetChanged() в на textchange методе, чтобы обновить ListView – Raghunandan

+0

Вы, вероятно, не обновляете свой список, когда edittext пуст – Raghunandan

+0

@Raghunandan Я добавил DataSetChanged по методу textChanged и имел ту же проблему, что и доцент обновления – user1352057

ответ

0

Я заметил, что вы используете:

if(constraintPassed == "" || constraintPassed.length() == 0) 

Вы никогда не должны используйте == для струнных, вы должны использовать equals().
Но в этом случае вы можете просто использовать constraintPassed.length() == 0 или:

if(constraintPassed.isEmpty()) 

(. Пожалуйста, прочитайте How do I compare strings in Java?, чтобы узнать разницу между == и equals())

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