Попробуйте везде, но не получите удовлетворительного ответа о SearchView в RecyclerView - PullRequest
0 голосов
/ 16 мая 2018

Это мое OnCreateOptionMenu В setOnQueryListener отображается ошибка здесь contact_object - класс модели

@Override
public boolean onCreateOptionsMenu(Menu menu) {

 {
    MenuInflater inflater=getMenuInflater();
    inflater.inflate(R.menu.search_list,menu);
    final MenuItem myMenuItem=menu.findItem(R.id.search_contact);
    SearchManager manager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView) menu.findItem (R.id.search_contact) .getActionView ();
    changedSearchViewTextColor(searchView);
   // ((EditText)searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text)).setHintTextColor(getResources().getColor(R.color.white));
     searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {

              if (!searchView.isIconified()){
                searchView.setIconified(true);
            }
            myMenuItem.collapseActionView();
            return false;
        }
        }
        @Override
        public boolean onQueryTextChange(String newText) {
             newText=newText.toLowerCase();
            final List<Contact_Object> filtermodelist=filter(contacts,newText);
            adapter.setFilter(filtermodelist);
            return true;
        }
    });
    return true;
  }

Я реализовал опцию фильтра, как показано ниже

    public List<Contact_Object> filter(List<Contact_Object> p,String query ) 
    {
    query=query.toLowerCase();
    final List<Contact_Object> filterModeList=new ArrayList<>();
    for (Contact_Object model :p){
        final String text=model.getName().toLowerCase();
        if (text.startsWith(query)){
            filterModeList.add(model);

        }
    }
    return filterModeList;
}

Я объявил функцию setFilter следующим образом в классе CustomAdapter

     public  void  setFilter(List<Contact_Object> listItem){
    parentList=new ArrayList<>();
    parentList.addAll(listItem);
    notifyDataSetChanged();
}

Я очень старался, но не получил соответствующего ответа Пожалуйста, кто-нибудь, помогите мне, ожидая ответа

1 Ответ

0 голосов
/ 16 мая 2018

В onQueryTextChange нет логики, потому что newText нигде не передается. Вы передаете список empty методу setFilter.

 @Override
public boolean onQueryTextChange(String newText) {
    newText = newText.toLowerCase();
    final List<Contact_Object> filterModeList=new ArrayList<>();
    for (Contact_Object obj : p) {
        String name = obj.getName().toLowerCase();
        if(name.contains(newText))
            filterModeList.add(obj);
    }
    adapter.setFilter(filtermodelist);
    return true;
}
...