title: SearchView filter with RecyclerView
body: <p>I have tried to implement a SearchView with suggestions (filter) in Fragment, but I have not managed it. I tried almost every tutorial but nothing worked for me. I would appreciate any help. Thank you</p>
  
  <p>XML 
  ...</p>
  
  <pre><code>    &lt;!--appBar layout--&gt;
      &lt;android.support.design.widget.AppBarLayout
          android:id="@+id/appBarLayout"
          android:fitsSystemWindows="true"
          android:layout_width="match_parent"
          android:layout_height="?attr/actionBarSize"&gt;
  
          &lt;!--searchView layout--&gt;
          &lt;android.support.v7.widget.SearchView
              android:id="@+id/search_view"
              app:layout_scrollFlags="scroll|enterAlways"
              android:iconifiedByDefault="false"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              app:closeIcon="@drawable/ic_clear_white_18dp"
              app:searchIcon="@drawable/ic_search_white_24dp"
              app:queryHint="@string/search_contact"
              app:iconifiedByDefault="false"
              android:background="@color/colorPrimary"
              app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
              app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" /&gt;
  
         &lt;/android.support.design.widget.AppBarLayout&gt;
  
          &lt;!-- recycler view--&gt;
          &lt;android.support.v7.widget.RecyclerView
              app:layout_behavior="@string/appbar_scrolling_view_behavior"
              android:id="@+id/recycler_view"
              android:layout_width="match_parent"
              android:layout_height="match_parent" /&gt;
  </code></pre>
  
  <p>Fragment</p>
  
  <pre><code>@Override
      public View onCreateView(LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) {
          View view = inflater.inflate(R.layout.fragment_contact_list, container, false);
  
          searchView = (SearchView)view.findViewById(R.id.search_view);
          fabButton = (FloatingActionButton)view.findViewById(R.id.fab_button);
  
          //recycler view
          recyclerView = (RecyclerView)view.findViewById(R.id.recycler_view);
          recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
          contacts = SugarRecord.listAll(Contact.class);
          contactsAdapter = new ContactsAdapter(getActivity(), contacts);
          recyclerView.setAdapter(contactsAdapter);
  
          searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
              @Override
              public boolean onQueryTextSubmit(String query) {
                  return false;
              }
  
              @Override
              public boolean onQueryTextChange(String newText) {
                  // TODO: setFilter
  
                  return true;
              }
          });
  
          return view;
  </code></pre>
  
  <p>Adapter</p>
  
  <pre><code>public class ContactsAdapter extends RecyclerView.Adapter&lt;ContactsAdapter.ContactVH&gt; {
  
      List&lt;Contact&gt; mContact;
      List&lt;Contact&gt; mContactFilter;
  
      Context mContext;
  
      public ContactsAdapter(Context context, List&lt;Contact&gt; contact) {
          this.mContact = contact;
          this.mContext = context;
      }
  
      @Override
      public ContactVH onCreateViewHolder(ViewGroup parent, int viewType) {
          View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_item_contact, parent, false);
          ContactVH viewHolder = new ContactVH(view);
          return viewHolder;
      }
  
      @Override
      public void onBindViewHolder(ContactVH holder, int position) {
          holder.name.setText(mContact.get(position).getName());
      }
  
      @Override
      public int getItemCount() {
          return mContact.size();
      }
  
      class ContactVH extends RecyclerView.ViewHolder {
          @BindView(R.id.contact_name)
          TextView name;
  
          public ContactVH(View itemView) {
              super(itemView);
              ButterKnife.bind(this, itemView);
          }
  
      }
  
  }
  </code></pre>