-1

This is my OnCreateOptionMenu An error is showing in setOnQueryListener here contact_object is model class

@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;
  }

I have implemented the filter option as below

    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;
}

I have declared the setFilter function as follow in CustomAdapter class

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

I have tried hard but didn't get the appropriate answer please anyone help me,waiting for answer

RahulSingh
  • 11
  • 6
  • 1
    What `error`? Provide exception from logicat. – Yupi May 15 '18 at 23:33
  • java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.SearchView.setOnQueryTextListener(android.support.v7.widget.SearchView$OnQueryTextListener)' on a null object reference – RahulSingh May 16 '18 at 07:46
  • Your `SearchView` is `null` check how did you connect `SearchView` with `Id` seems you messed something up there. – Yupi May 16 '18 at 09:48

1 Answers1

0

There is no logic in onQueryTextChange because newText is not passed anywhere. You are passing the empty list to the setFilter method.

 @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;
}
Yupi
  • 4,402
  • 3
  • 18
  • 37