2016-11-29 2 views
0

Я новичок! пользователь, я пытаюсь отфильтровать свои данные с помощью Search View. Фильтрация, похоже, работает, но когда я удаляю текст в окне поиска, чтобы ввести другой, у меня есть только найденный элемент, а не мой первоначальный список.Я не могу сбрасывать свой первоначальный список, когда удаляю поисковый запрос в Search View в Android

Более аналитический я использую следующий адаптер:

public void filterData(String query){ 

    query = query.toLowerCase(); 

    if(query.isEmpty()){ 
     expListTitle .addAll(InitialList); 

    } 
    else { 

     expListTitle.clear(); 
     for(String titles: NewexpListTitle) 
     { 
      if(titles.toLowerCase().contains(query)) 
      { 
       expListTitle.add(titles); 
      } 
     } 

    } 

    notifyDataSetChanged(); 

} 

и в конструкторе адаптера я делаю следующее:

public CustomExpandableListAdapter(Context context, List<String> expListTitle, LinkedHashMap<String,ArrayList<Business>> expListDetail) 
{ 
    this.context = context; 
    this.expListTitle = expListTitle; 
    this.expListDetail = expListDetail; 

    this.NewexpListTitle= new ArrayList<String>(); 
    this.NewexpListTitle.addAll(expListTitle); 

    this.InitialList = new ArrayList<String>(); 
    this.InitialList.addAll(expListTitle); 
} 

И на моем классе я дал следующий который называют FilterData метод

@Override 
public boolean onQueryTextChange(String query) { 
    listAdapter = new CustomExpandableListAdapter(getApplicationContext(), FinalListTitle, FinalMap); 

    listAdapter.filterData(query); 

    expandableListView.setAdapter(listAdapter); 
    return false; 
} 

У меня выше setAdapter и инициализация becaus e поступают с объекта JSON с использованием volley

Похоже, что при очистке SearchView список InitialList также очищается, а его левый с найденным элементом. Как сохранить мой первоначальный список тем временем?

Спасибо

+0

см ссылку [это] (http://stackoverflow.com/a/24771174/6005977). Это поможет вам –

+0

Почему вы создаете новый адаптер каждый раз, когда изменяется запрос? Создайте только один и обновите его модель onQueryTextChange –

+0

@omar, потому что данные поступают с объекта JSON с использованием волейбола – NoviceUser

ответ

0
this below code solved my issue. 

    @Override 
    public boolean onQueryTextChange(String newText) { 
     if (TextUtils.isEmpty(newText)) { 
      lv_listname.clearTextFilter(); 
      listAdapter.getFilter().filter(""); 
     } else { 
      listAdapter.getFilter().filter(newText); 
      // ad_names.notifyDataSetChanged(); 
      // lv_listname.setFilterText(newText); 
      // searchview.dismissSuggestions(); 
     } 
     return true; 
    } 
0

Попробуйте это,

@Override 
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
     str=charSequence.toString(); 
     if(charSequence.length() >0){ 
      try { 

       vRow.clear(); 
       for (RowItem r : vvRow){ 
        ss= r.title.toLowerCase().toString(); 
        if (ss.contains(str.toLowerCase())){ 
         vRow.add(r); 
        } 
       } 
       adapter.notifyDataSetChanged(); 
      }catch (Exception e){ 
       Toast.makeText(getActivity(),e.getMessage(),Toast.LENGTH_SHORT).show(); 
      } 
     }else{ 
      searchedt.setCompoundDrawablesWithIntrinsicBounds(0,0,0,0); 
      try { 
       vRow.clear(); 
       for (RowItem r : vvRow){ 
        vRow.add(r); 
       } 
       adapter.notifyDataSetChanged(); 
      }catch (Exception e){ 
       Toast.makeText(getActivity(),e.getMessage(),Toast.LENGTH_SHORT).show(); 
      } 
     } 

    }