2016-11-16 2 views
0

У меня проблема, когда я ищу элемент в представлении поиска, тогда я могу выполнить поиск по объекту (Объекту), но когда я очищаю текст (например, отмените поиск, когда текст отсутствует) в списке отображается тот же объект, который я искал раньше, а не показывающий весь объект после отмены.Как обновить список в окне поиска

Я пробовал:

адаптер Класс:

public void animateTo(List<OrderPogo> models) { 
     applyAndAnimateRemovals(models); 
     applyAndAnimateAdditions(models); 
     applyAndAnimateMovedItems(models); 

    } 

    private void applyAndAnimateRemovals(List<OrderPogo> newModels) { 

     for (int i = items.size() - 1; i >= 0; i--) { 
      final OrderPogo model = items.get(i); 
      if (!newModels.contains(model)) { 
       removeItem(i); 
      } 
     } 
    } 

    private void applyAndAnimateAdditions(List<OrderPogo> newModels) { 

     for (int i = 0, count = newModels.size(); i < count; i++) { 
      final OrderPogo model = newModels.get(i); 
      if (!items.contains(model)) { 
       addItem(i, model); 
      } 
     } 
    } 

    private void applyAndAnimateMovedItems(List<OrderPogo> newModels) { 

     for (int toPosition = newModels.size() - 1; toPosition >= 0; toPosition--) { 
      final OrderPogo model = newModels.get(toPosition); 
      final int fromPosition = items.indexOf(model); 
      if (fromPosition >= 0 && fromPosition != toPosition) { 
       moveItem(fromPosition, toPosition); 
      } 
     } 
    } 

    public OrderPogo removeItem(int position) { 
     final OrderPogo model = items.remove(position); 
     notifyItemRemoved(position); 
     return model; 
    } 

    public void addItem(int position, OrderPogo model) { 
     items.add(position, model); 
     notifyItemInserted(position); 
    } 

    public void moveItem(int fromPosition, int toPosition) { 
     final OrderPogo model = items.remove(fromPosition); 
     items.add(toPosition, model); 
     notifyItemMoved(fromPosition, toPosition); 
    } 

    public class CustomFilter extends Filter { 
     ArrayList<OrderPogo> arrayList; 
     MaterialRecylerAdapter adapter; 
     ArrayList<OrderPogo> filterArrayList; 

     public CustomFilter(ArrayList<OrderPogo> arrayList, MaterialRecylerAdapter adapter) { 
      this.arrayList = arrayList; 
      this.adapter = adapter; 
     } 

     @Override 
     protected FilterResults performFiltering(CharSequence constraint) { 
      if(filterArrayList!=null && filterArrayList.size()>0){ 
       Log.e("filterArrayList",""+filterArrayList.size()); 
      // filterArrayList.addAll(arrayList); 
      } 


      FilterResults filterResults=new FilterResults(); 
      if(constraint!=null && constraint.length()>0){ 
       constraint=constraint.toString().toUpperCase(); 
       for(int i=0;i<arrayList.size();i++){ 
        if(arrayList.get(i).getId().toUpperCase().contains(constraint)){ 
         filterArrayList.add(arrayList.get(i)); 
        }else if(arrayList.get(i).getLoadingLocation().toUpperCase().contains(constraint)){ 
         filterArrayList.add(arrayList.get(i)); 
        }else if(arrayList.get(i).getUnloadingLocation().toUpperCase().contains(constraint)){ 
         filterArrayList.add(arrayList.get(i)); 
        }else if(arrayList.get(i).getTruckNumberLrNmbr().toUpperCase().contains(constraint)){ 
         filterArrayList.add(arrayList.get(i)); 
        }else if(arrayList.get(i).getDistance().toUpperCase().contains(constraint)){ 
         filterArrayList.add(arrayList.get(i)); 
        }else if(arrayList.get(i).getDate().toUpperCase().contains(constraint)){ 
         filterArrayList.add(arrayList.get(i)); 
        } 

       } 
       filterResults.values = filterArrayList; 
       filterResults.count = filterArrayList.size(); 


      }else{ 
       filterResults.values = items; 
       filterResults.count = items.size(); 
       // filterArrayList.addAll(arrayList); 
//    filterResults.count= arrayList.size(); 
//    filterResults.values=arrayList; 
      } 

      return filterResults; 
     } 

     @Override 
     protected void publishResults(CharSequence constraint, FilterResults results) { 
      //Here i want the arraylist from the recylerview without making the arraylist static 

      items= (List<OrderPogo>) results.values; 
      notifyDataSetChanged(); 
     } 
    } 

Фрагмент класса Содержащие SearchView:

@Override 
      public boolean onQueryTextChange(String newText) { 

       if(TextUtils.isEmpty(newText)){ 
        try{ 
         materialRecylerAdapter.getFilter().filter(""); 
         Log.i("Nomad", "onQueryTextChange Empty String"); 
//      placesListView.clearTextFilter(); 
//      materialRecylerAdapter = new MaterialRecylerAdapter(getActivity(), (ArrayList<OrderPogo>) myOrderArrayList,nextFragmentFlag,"default"); 
//      materialRecylerAdapter.notifyDataSetChanged(); 
         // materialRecylerAdapter.getFilter().filter(newText); 
        }catch(Exception e){ 

        } 

       }else{ 
        // materialRecylerAdapter.getFilter().filter(newText.toString()); 
        final List<OrderPogo> filteredModelList = filter(myOrderArrayList, newText); 
        materialRecylerAdapter.animateTo(filteredModelList); 
        recyclerView.scrollToPosition(0); 
       } 

       return true; 
      } 
     }); 

Фильтр метод в фрагменте:

private List<OrderPogo> filter(List<OrderPogo> models, String query) { 
     query = query.toLowerCase(); 

     final List<OrderPogo> filteredModelList = new ArrayList<>(); 
     for (OrderPogo model : models) { 
      final String text = model.getId().toLowerCase(); 
      final String text1 = model.getLoadingLocation().toLowerCase(); 
      final String text2 = model.getUnloadingLocation().toLowerCase(); 
      final String text3= model.getDistance().toLowerCase(); 
      if (text.contains(query)) { 
       filteredModelList.add(model); 
      }else if(text1.contains(query)){ 
       filteredModelList.add(model); 
      }else if(text2.contains(query)){ 
       filteredModelList.add(model); 
      }else if(text3.contains(query)){ 
       filteredModelList.add(model); 
      } 
     } 
     return filteredModelList; 
    } 

ответ

1

Вы просто должны добавить chec k для пустого поля в строке поиска. Когда запрос пуст, добавьте все элементы в список и сообщите об изменении набора данных.

 @Override 
     public boolean onQueryTextChange(String newText) { 
      initList(); //reset data at the start 
      if (newText.equals("")) 
       initList(); //reset data when there is no query 
      ... 

initList метод инициализирует все элементы списка и адаптер связан с ним. Сделайте notifyDataSetChanged в конце метода onQueryTextChange, чтобы уведомить адаптер об измененных наборах данных после каждого изменения поискового запроса.

+0

как это сделать ?? –

+0

Я проверил, что запрос пуст или нет в onQueryTextChange, но не может знать, как его добавить снова, если текст пуст –

+0

@PavneetSingh, да, но я не могу заключить, когда текст пуст, тогда почему показывая только что найденный объект. –

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