2014-02-09 3 views
2

Я пытаюсь искать в виде списка в android. Вот мой кодФильтр для поиска в android listView

 @Override 
    public Filter getFilter(){ 
     return new Filter(){ 

      @Override 
      protected FilterResults performFiltering(CharSequence constraint) { 
       FilterResults result = new FilterResults(); 

       if (constraint != null && constraint.toString().length() > 0) { 
        constraint = constraint.toString(); 
        List<FoodCell> founded = new ArrayList<FoodCell>(); 
        for(FoodCell item: allItemFood){ 
         if(item.cellText.toString().contains(constraint)){ 
           founded.add(item); 
          } 
        } 
        result.values = founded; 
        result.count = founded.size(); 
        }else 
        result.count = 0; 

       return result; 
     } 

     @SuppressWarnings("unchecked") 
     @Override 
     protected void publishResults(CharSequence constraint, FilterResults results) {    
      clear(); 
      if(results.count != 0){ 
       for (FoodCell item : (List<FoodCell>) results.values) { 
         add(item); 
        } 
      }      
      notifyDataSetChanged(); 
     } 

     }; 
     } 



    @Override 
public boolean onQueryTextChange(String newText) { 
    //check if user deleted a character 
    if(length > newText.length()){ 
     allItemFood = allItemFoodTmp; 

    } 
    if (TextUtils.isEmpty(newText)) { 
     adapter = new CustomListViewAdapter(this, R.layout.listfood,allItemFood); 
     getListView().setAdapter(adapter); 
     getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
    } else { 
     adapter.getFilter().filter(newText); 
    } 
    length = newText.length(); 
    return true; 
} 



@Override 
public boolean onQueryTextSubmit(String query) { 
    return false; 
} 

предполагает, что у нас есть следующие пункты в списке, аа, абы, ас , когда я введите текст «Ааз» в качестве поискового запроса, он показывает пустой список, который является истинным, но когда я удалить символ «z» из поискового запроса результат остается пустым, что является ожидаемым. как я могу его решить?

+0

Опубликовать весь адаптер – Blackbelt

+0

не полезен, содержит код для действия click. –

ответ

1

Не знаете, какой виджет вы используете для ввода текста ввода, если это EditView (учитывая, что я отвечаю), тогда вы должны попробовать добавить к нему TextWatcher, а затем в методе onTextChanged() вставить свой поиск login, который будет выполнять его каждый раз, когда вы добавляете или удаляете символ внутри EditText.

Дайте мне знать, если вы используете что-то еще, и я постараюсь помочь соответствующим образом. Счастливое кодирование. :)

+1

Вот пример. http://www.androidhive.info/2012/09/android-adding-search-functionality-to-listview/ –

+0

Я использую редактирование текста и поиск по методу onTextChanged, но моя проблема заключается в удалении любого символа из поискового запроса, списка пуст после it.i решил его, используя временный список для хранения значений в нем и повторно назначить в методе onTextChanged –

+0

Приятно это слышать. :) Можете ли вы поделиться методом onTextChanged() (только если хотите), и мы можем попытаться найти, есть ли другой способ, вы можете избежать создания дополнительного списка. –

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